当前位置: 代码迷 >> python >> 在工人关机期间通知celery任务停止
  详细解决方案

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

热度:28   发布时间:2023-07-14 08:58:25.0

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

问题:问题是每次我停止工作后(通过sudo服务celeryd停止)我必须手动杀死任务(通过kill -9 ); 该任务忽略了来自worker的SIGTERM 我已经阅读了Celery文档和Stackoverflow,但我找不到工作解决方案。 任何想法如何解决问题?

发送QUIT信号将 : sudo service celeryd stop -QUIT

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

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

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