如何从嵌套芹菜链中的错误中恢复?

时间:2018-11-11 18:56:34

标签: python celery celery-task

我要运行的工作流程如下:

workflow = (
    generator.s() |
    spread.s() |
    gather.s()
)

其中spread是将自己替换为组的任务。

from celery import Celery, group

celery_app = Celery()


@celery_app.task(bind=True)
def spread(self, numbers):
    return self.replace(group(
        (task_1.si(n) | task_2.s() | task_3.s()) for n in numbers
        )
    )

整个工作流程正常运行,符合预期。

我的问题本质上仅是关于spread创建的组中的链。如果其中一些失败,我不在乎。如果链中某处的错误会导致将较短的结果列表传递给gather,那很好。但是,我不确定如何实现。

我当然可以在task_1task_2task_3中捕获异常,并传递空的伪结果。为了方便起见,我真的很想在链中任何地方出现错误时说,请记录回溯并将结果从组中删除或传递空的虚拟结果。

我已经广泛搜索了文档和GitHub问题,但找不到任何东西。我知道我可以将on_error回调传递给链,但是我不知道如何从那里传递空结果(如果可能的话)。

设置:

  • Python 3.6
  • 芹菜4.2.1
  • Redis经纪人和后端(尽管如果启用该功能,切换到我并不是问题)

0 个答案:

没有答案