芹菜的节拍任务能否按时间间隔执行?

时间:2014-09-21 04:27:27

标签: celery

这是节拍任务设置:

celery_app.conf.update(
CELERYBEAT_SCHEDULE = {
'taskA': {
    'task': 'crawlerapp.tasks.manual_crawler_update',
    'schedule': timedelta(seconds=3600),
},
'taskB': {
    'task': 'crawlerapp.tasks.auto_crawler_update_day',
    'schedule': timedelta(seconds=3600),
},
'taskC': {
    'task': 'crawlerapp.tasks.auto_crawler_update_hour',
    'schedule': timedelta(seconds=3600),
},
})

通常,taskA,taskB,taskC在我的命令celery -A myproj beat之后同时执行作为节拍任务。但是现在我希望taskA首先执行,然后一段时间后taskB执行第二次,taskC最后执行。在3600秒后它们再次执行.3600秒后它们再次执行.3600秒后它们再次执行。有可能吗?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。为所有三个任务创建一个链,然后使用此链式任务进行调度。

tasks.py文件中:

from celery import chain
chained_task = chain(taskA, taskB, taskC)

然后安排chained_task

celery_app.conf.update(
CELERYBEAT_SCHEDULE = {
'chained_task': {
    'task': 'crawlerapp.tasks.manual_crawler_update',
    'schedule': timedelta(seconds=3600),
},  
})

这样,您的任务将在3600秒内按顺序执行一次。