使用 Celery 并行和顺序执行任务

Raj*_*aju 4 python celery

我对 Celery 很陌生,并计划用它来安排一些工作。其中一种情况如下。

TASK_NM | DEPENDENCY

T1

T2      |        T1

T3      |        T1 

T4

T5      |        T3 and T4
Run Code Online (Sandbox Code Playgroud)

从上面的案例来看,

  1. 我必须并行执行 T1 和 T4

  2. T1成功完成后,并行执行T2和T3

  3. 成功完成T3和T4后,执行T5。

如果任何任务中途失败,则不执行相关作业。

我们如何使用 Celery 实现这一目标?

提前致谢!!!

2ps*_*2ps 5

是的,但这需要一些工作。您将不得不使用chain, group, 并chord获得您想要的行为:

  1. 使用chain以下命令连续执行 T1、T2 和 T3 :

    res = chain(T1.si(), T2.si(), T3.si())
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用group以下命令与 T4 并行执行 (1) :

    res2 = group(res.s(), T4.s())
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用chord以下命令在 T3 和 T4 完成后执行 T5 :

    res3 = chord(res2.s(), T5.s())
    
    Run Code Online (Sandbox Code Playgroud)
  4. 全部执行

    result = res3().get() 
    
    Run Code Online (Sandbox Code Playgroud)

文档很好地解释了哪些用于串行,哪些用于并行。需要记住的棘手部分是chain,chordgroup所有返回任务本身,因此必须使用(),delay()或调用apply_async()