如何确保在所有工作进程停止并返回后,撤销的Celery任务永远不会运行

时间:2014-11-27 13:16:23

标签: celery

这是用例。

第1天:从现在起7天后从倒计时调用芹菜任务 第2天:撤销此任务 第3天:升级发生,因此所有工作进程都关闭,然后在一段时间内再次恢复

我测试了类似的场景,我发现在所有工作进程中都有一个撤销进程的撤销列表。但是消息(对应于任务)仍保留在委派任务的工作进程中。因此,一旦所有工作进程都关闭,撤销列表信息也会丢失。

我想了解是否是这种情况,然后在所有工作人员重新启动之后,那么在没有取消/撤销的情况下,该流程是否会开始执行?我是这样说的,因为撤销列表信息仅存在于工作进程中,而不是存在于代理中。(/ p>)

有人可以确认这种行为吗?

1 个答案:

答案 0 :(得分:1)

你是对的 - 芹菜工作者将撤销的任务列表保存在内存中,如果重新启动所有工作程序,列表就会消失。引用Celery工人用户指南:

  

通过向所有工作人员发送广播消息来撤销任务,工作人员会在内存中保留已撤销任务的列表。当工作人员启动时,它会将已撤销的任务与群集中的其他工作人员同步。

     

已撤销任务的列表在内存中,因此如果所有工作人员重新启动已撤销的ID列表也将消失。如果要在重新启动之间保留此列表,则需要使用-statedb参数为celery worker指定要存储的文件:

有关详细信息,请参阅“Celery用户指南”中的“持久撤消”部分。