这是用例。
第 1 天:从现在起 7 天后调用带有倒计时的芹菜任务第 2 天:撤销此任务第 3 天:升级发生,因此所有工作进程都关闭,然后在一段时间内再次恢复
我已经测试了类似的场景,我发现所有工作进程中都撤销的进程有一个撤销列表。但消息(对应于任务)仍保留在任务委派给的工作进程中。因此,一旦所有工作进程都关闭,撤销列表信息也会丢失。
我想了解如果是这种情况,那么在所有工人恢复之后,该过程不会开始执行而不会被取消/撤销吗?我之所以这样说,是因为撤销列表信息(从我的感觉来看)仅驻留在工作进程中,而不是在代理中。
有人可以确认这种行为吗?
你是对的 - 芹菜工作人员将吊销任务的列表保存在内存中,如果所有工作线程重新启动,该列表将消失。引用关于工人的芹菜用户指南:
撤销任务的工作原理是向所有工作线程发送广播消息,然后工作线程在内存中保留已撤销任务的列表。当工作线程启动时,它将撤销的任务与群集中的其他工作线程同步。
已吊销任务的列表位于内存中,因此如果所有工作线程重新启动,已吊销 ID 的列表也将消失。如果要在重新启动之间保留此列表,则需要使用 –statedb 参数对芹菜工人指定要存储这些内容的文件:
有关更多信息,请参阅 Celery 用户指南中有关持久撤销的部分。