Celery - 在中间的子任务失败之后,有继续执行链的方法

时间:2013-03-07 19:48:56

标签: django celery django-celery

我需要找到在任何中间子任务抛出异常后如何继续使用 immutable = True 子任务继续执行链的方法。

我已经阅读了此thread和此issue comment。现在这些错误已得到修复,但我需要实现相反的行为。我不需要停止我的链执行。可能有另一种方式以任意顺序一个接一个地执行独立任务列表而不在它们之间发送结果?我需要异步执行它们,因为在这种情况下,django-celery将存储有关每个任务的统计信息。

一种解决方案是覆盖所有子任务的主体:

try:
    ...
except Exception, e:
    logger.error('Exception raised: %s' % e)
    raise e

但在这种情况下,所有子任务都将以 SUCCESS 状态执行,并且 django-celery 管理界面中的异常追溯将毫无用处。

1 个答案:

答案 0 :(得分:0)

使用Chord和CELERY_CHORD_PROPAGATES

进行Perharps

因此,当Chord的子部分失败时,您可以管理Exception并使用它执行您想要的操作(记录某些内容,重新执行任务以进行更改执行等)。

由于您已经拥有一个链,因此Chord只是其中的一部分,您需要知道状态的任务。