是否有可能暂停Celery击败任务但其他节拍任务仍然有效?

时间:2014-10-07 08:37:36

标签: python task celery celerybeat

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。

是否可以停止一项任务并让其他任务继续运行?

2 个答案:

答案 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。您的日程安排将存储在数据库中。您可以使用存储计划表的“已启用”列启用/禁用特定计划。我用过这种方法。