如何避免在重新部署时中断正在运行的 Celery 任务?



我有一个应用程序,其中有芹菜工人作为其中的一部分。当我部署时,这将杀死那些正在运行的进程。

因此,任务将已启动,但永远不会完成,并且在部署完成后不会重新启动。

避免此问题并在部署完成后重新启动这些任务的最佳方法是什么?

是否要在我的所有任务中使用acks_late?还是其他方式?

@celery.task(acks_late=True)
def my_task():
pass

作为部署过程的一部分,我们要做的是在我们要部署新代码时向集群中的所有 Celery 工作人员发送关闭信号。发送信号后,我们开始部署,部署成功完成后,我们将有一组新的工作线程订阅到一组预定义的队列。

由旧的 Celery 工作线程创建的工作进程可能会在接下来的几个小时(甚至几天!(内继续运行,但它们不会运行任何新计划的任务,因为它们在收到关闭信号时会从所有队列中取消订阅。

如您所见,此过程不涉及撤销和重新安排任务,因为这将是一个更复杂的过程,因为我们有时会在数百个 Celery 节点上同时运行数千个任务......

相关内容

  • 没有找到相关文章

最新更新