当链中的Celery任务失败时会发生什么?
如果失败的任务成功重试,它是否只是从链中的位置恢复?
例如:
my_chain = (task1.s() | task2.s() | task3.s())
my_chain.apply_async((**params))
如果task2
失败并成功重试,那么task3
会被执行吗?
有一个旧问题涉及主题(Retrying celery failed tasks that are part of a chain),而Github issue和commit适用于Celery版本3.0.4,Task.retry
转发链接链接以解决此问题。但是,在这种情况下,我无法找到任何解释Celery行为的具体文档。
当然,在Celery文档中没有提及它重试部分(http://celery.readthedocs.org/en/latest/userguide/tasks.html#retrying,http://celery.readthedocs.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.retry)
答案 0 :(得分:2)
我认为以下代码段最接近于描述它。
"当您调用retry时,它将使用相同的task-id发送新消息,并且会确保将消息传递到与原始任务相同的队列。
当重试任务时,这也被记录为任务状态,以便您可以使用结果实例跟踪任务的进度(参见状态)。"
我相信在哪里声明跟踪任务状态最能描述您正在寻找的内容。
我也基于第一手经验了解这一点