Celery 重新部署时如何避免中断运行芹菜任务?

Celery 重新部署时如何避免中断运行芹菜任务?,celery,Celery,我有一个申请,其中有芹菜工人。当我部署时,这将杀死那些正在运行的进程 因此,任务将已经开始,但永远不会完成,并且在部署完成时不会重新启动 避免此问题并在部署完成后重新启动这些任务的最佳方法是什么 是不是在我所有的任务上使用acks_?还是另一种方式 @celery.task(acks_late=True) def my_task(): pass 作为部署过程的一部分,我们要做的是在即将部署新代码时向集群中的所有芹菜工人发送关闭信号。一旦发送了信号,我们就开始部署,一旦部署成功完成,我们

我有一个申请,其中有芹菜工人。当我部署时,这将杀死那些正在运行的进程

因此,任务将已经开始,但永远不会完成,并且在部署完成时不会重新启动

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

是不是在我所有的任务上使用acks_?还是另一种方式

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

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

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


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

欢迎使用StackOverflow!请澄清,为什么你必须杀死芹菜工人进程而不是发送一个术语信号?您的任务是否长期运行?@Greenev如果我使用AWS beanstalk,例如,我不控制进程的结束方式,AWS控制。任务运行时间很长,长达数小时。在这种情况下,您可能希望覆盖应用程序默认的
task\u acks\u late
设置