在工人关机期间通知celery任务停止

时间:2014-03-10 13:16:49

标签: python celery

我正在使用芹菜3.X和RabbitMQ后端。有时它需要重新启动celery(将新的源代码更新推送到服务器)。但是在循环内部有一个大循环和try / catch的任务;完成任务可能需要几个小时。如果我将其停止并且稍后将重新启动它,将不会发生任何关键事件。

问题:问题是每次我停止工作后(通过sudo service celeryd stop)我必须手动杀死任务(通过 kill -9 );任务忽略来自worker的SIGTERM 。我读过Celery docs& Stackoverflow但我找不到工作解决方案。任何想法如何解决问题?

2 个答案:

答案 0 :(得分:0)

发送退出信号将stop workers immediatelysudo service celeryd stop -QUIT

如果CELERY_ACKS_LATE设置设置为True,则当工作人员停止时,工作人员停止时运行的任务将再次运行。

答案 1 :(得分:-1)

Celery不打算运行长任务,因为它只会阻止工作人员执行任务。我建议重新安排你的逻辑,让任务调用自己而不是循环。一旦关闭正在进行,您当前的任务将完成,并将在芹菜关闭之前停止的同一点恢复。

此外,将任务拆分为块,您将能够将任务转移到另一个工作人员/主持人,这可能是您将来想要做的事情。