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
来管理任务。
当我发现一个任务中存在错误时,我必须停止整个任务来修改错误。然后我重新启动Celery。
是否可以停止一项任务并让其他任务继续运行?
答案 0 :(得分:0)
是的,有可能。一种方法是将3个任务排队到不同的队列中,并让不同的工作人员来运行任务。
通过这种方式,只要您对任何任务有任何问题,您就可以停止相应的工作人员。解决问题并再次运行worker。所以其他两个工人将照常执行任务。
例如,安排像这样的定期任务
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
答案 1 :(得分:0)
如果您使用的是django,一种方法是考虑使用djcelery.schedulers.DatabaseScheduler。您的日程安排将存储在数据库中。您可以使用存储计划表的“已启用”列启用/禁用特定计划。我用过这种方法。