我对 Celery 很陌生,并计划用它来安排一些工作。其中一种情况如下。
TASK_NM | DEPENDENCY
T1
T2 | T1
T3 | T1
T4
T5 | T3 and T4
Run Code Online (Sandbox Code Playgroud)
从上面的案例来看,
我必须并行执行 T1 和 T4
T1成功完成后,并行执行T2和T3
成功完成T3和T4后,执行T5。
如果任何任务中途失败,则不执行相关作业。
我们如何使用 Celery 实现这一目标?
提前致谢!!!
是的,但这需要一些工作。您将不得不使用chain, group, 并chord获得您想要的行为:
使用chain以下命令连续执行 T1、T2 和 T3 :
res = chain(T1.si(), T2.si(), T3.si())
Run Code Online (Sandbox Code Playgroud)使用group以下命令与 T4 并行执行 (1) :
res2 = group(res.s(), T4.s())
Run Code Online (Sandbox Code Playgroud)使用chord以下命令在 T3 和 T4 完成后执行 T5 :
res3 = chord(res2.s(), T5.s())
Run Code Online (Sandbox Code Playgroud)全部执行
result = res3().get()
Run Code Online (Sandbox Code Playgroud)文档很好地解释了哪些用于串行,哪些用于并行。需要记住的棘手部分是chain,chord和group所有返回任务本身,因此必须使用(),delay()或调用apply_async()。