2
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用来管理任务。

当我发现一个任务有bug时,我必须停止整个任务来修改bug。然后我重新启动芹菜。

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

4

2 回答 2

0

如果您使用 django,一种方法是考虑使用 djcelery.schedulers.DatabaseScheduler。您的日程安排将存储在数据库中。您可以使用存储计划的表中的“启用”列启用/禁用特定计划。我用过这种方法。

于 2014-10-09T07:20:43.937 回答
0

对的,这是可能的。一种方法是将 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
于 2014-10-07T12:24:22.030 回答