我要运行的工作流程如下:
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_1
,task_2
和task_3
中捕获异常,并传递空的伪结果。为了方便起见,我真的很想在链中任何地方出现错误时说,请记录回溯并将结果从组中删除或传递空的虚拟结果。
我已经广泛搜索了文档和GitHub问题,但找不到任何东西。我知道我可以将on_error
回调传递给链,但是我不知道如何从那里传递空结果(如果可能的话)。
设置: