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

时间:2017-01-25 21:21:54

标签: python celery

我对Celery很新,并计划用它来安排一些工作。其中一个场景如下。

TASK_NM | DEPENDENCY

T1

T2      |        T1

T3      |        T1 

T4

T5      |        T3 and T4

从上述案例中,

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

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

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

  4. 如果中间任何任务失败,请不要执行从属作业。

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

    提前致谢!!!

1 个答案:

答案 0 :(得分:2)

是的,但这需要一些工作。您将使用chain, group, and chord来获取所需的行为:

  1. 使用chain

    连续执行T1,T2和T3
    res = chain(T1.si(), T2.si(), T3.si())
    
  2. 使用group

    与T4并行执行(1)
    res2 = group(res.s(), T4.s())
    
  3. 使用chord

    完成T3和T4后执行T5
    res3 = chord(res2.s(), T5.s())
    
  4. 全部执行

    result = res3().get() 
    
  5. 文档可以很好地解释哪些用于串行以及哪些用于并行。要记住的棘手部分是chainchordgroup所有返回任务本身都必须使用()delay()或{{1}来调用}}