这是节拍任务设置:
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),
},
})
通常,任务A、任务B和任务C在我的命令celery -A myproj beat
之后与节拍任务同时执行。但现在我希望任务A先执行,然后一段时间后任务B执行第二个,任务C最后执行。3600秒后,他们再次出击。3600秒后,他们再次出击。3600秒后,他们再次出击。有可能吗?
是的,这是可能的。为所有三个任务创建一个链,然后使用此链任务进行调度。
在您的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秒内按顺序执行一次。