欢迎访问宙启技术站
智能推送

使用celery.schedulescrontab()在Python中设置定时任务

发布时间:2023-12-23 23:03:44

在Python中,可以使用Celery的schedules模块来设置定时任务。其中,crontab()是一个常用的定时任务调度器。

crontab()接受6个参数:minute(0-59)、hour(0-23)、day_of_week(0-7,其中0和7都表示周日)、day_of_month(1-31)、month_of_year(1-12)、timezone(时区)。这些参数可以是具体的数字或者是'*'(表示任意值)、*/n(表示每隔n个单位)等。

下面是一个设置定时任务的例子:

from datetime import timedelta
from celery.schedules import crontab

CELERY_BROKER_URL = 'xxx'
CELERY_RESULT_BACKEND = 'xxx'

CELERY_BEAT_SCHEDULE = {
    'task1': {
        'task': 'your_task_func',  # 定时任务的函数名
        'schedule': crontab(hour=8, minute=0, day_of_week='*/1'),  # 每周一8点执行
        'args': (1, ),  # 传递给定时任务函数的参数
    },
    'task2': {
        'task': 'your_task_func',
        'schedule': timedelta(minutes=30),  # 每30分钟执行一次
        'kwargs': {'arg1': 2, 'arg2': 'foo'},  # 使用关键字参数传递参数
    },
}

在上面的例子中,定义了两个定时任务:task1task2task1是每周一8点执行,使用crontab(hour=8, minute=0, day_of_week='*/1')来指定定时任务的调度规则。task2是每30分钟执行一次,使用timedelta(minutes=30)来指定定时任务的调度规则。

argskwargs是可选的,用来传递给定时任务函数的参数。在这个例子中,task1传递了一个参数1task2传递了两个参数arg1arg2

要使用以上设置的定时任务,你需要在启动Celery的时候,制定相应的配置。使用命令行启动如下:

celery -A your_project_name worker --beat

其中,your_project_name是你的项目名字。

或者,你也可以通过编写一个脚本来启动Celery:

from celery import Celery
from your_project_name import CELERY_BROKER_URL, CELERY_RESULT_BACKEND, CELERY_BEAT_SCHEDULE

app = Celery('your_project_name', broker=CELERY_BROKER_URL, backend=CELERY_RESULT_BACKEND)
app.conf.beat_schedule = CELERY_BEAT_SCHEDULE

if __name__ == '__main__':
    app.start()

以上是使用celery.schedules.crontab()设置定时任务的一个例子,你可以根据自己的需求修改调度规则和执行的函数。