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),
},
})
我的应用程序中有 3 个节拍任务。当节拍任务运行时,我使用 flower
来管理任务。
当我发现一个任务中存在错误时,我必须停止整个任务以修改错误。然后我重新启动芹菜。
是否可以只停止一个任务并让其他任务继续运行?
是的,这是可能的。一种方法是将 3 个任务排在不同的队列中,并让不同的工作线程来运行任务。
这样,只要您对任何任务有任何问题,您就可以停止相应的工作人员。修复问题并再次运行辅助角色。因此,另外两名工人将像往常一样执行任务。
例如,计划这样的定期任务
from celery.decorators import periodic_task
from celery.schedules import crontab
@periodic_task(run_every=crontab(minute=0, hour='*/1'), queue='q1',
options={'queue': 'q1'})
def taskA():
#do something
并启动工作线程
celery -A your_app worker -l info -Q q1 -B
如果你正在使用 django,一种方法是考虑使用 djcelery.schedulers.DatabaseScheduler。您的计划将存储在数据库中。您可以使用存储计划的表中的"已启用"列启用/禁用特定计划。我用过这种方法。