在芹菜工作流中引入同步链式执行

时间:2016-10-03 04:29:58

标签: python asynchronous celery

假设有4个任务T1T2T3T4。它们被链接在一起T1.si() | T2.si() | T3.si() | T4.si()T3T30 .. T3n异步生成进一步的任务chord(T30,...,T3n)(reduce.s())。我事先并不知道n(即产生的子任务T3i没有)。

我希望T4仅在完成所有T3i..T3n任务后执行。正如预期的那样,由于异步行为,T3立即返回,然后T4在和弦完成之前开始执行。

我可以在T3.get()之前添加一个只执行T4的同步任务,但它会阻止其中一个工作进程。

有没有办法修复此设计以避免阻塞任务或更好的设计?

1 个答案:

答案 0 :(得分:1)

我会稍微提高@ jenner-felton的评论......

您可以这样称呼:

chain(T1.s(), T2.s(), T3.s(T4.s()))

e.g。 T4.s()作为参数之一传递给T3任务。

T3将自行运行chord,并将T4作为回调传递。