芹菜团体和连锁店

时间:2018-06-28 07:15:54

标签: python celery

我需要在Celery中对一些任务进行排序,其中一些任务应作为单个任务,而某些则应并行工作,当组中的任务完成时,它应该通过下一个任务:

chain(
    task1.s(),
    task2.s(),
    group(task3.s(), task4.s()), 
    group(task5.s(), task6.s(), task7.s()), 
    task7.s()
).delay()

但是我认为我做错了。任何人都知道该怎么做吗?

此外,我不在乎将每个任务的结果发送给其他任务。

2 个答案:

答案 0 :(得分:1)

这听起来像一个和弦,例如,您在其中并行执行任务,并在并行任务完成时回调到另一个任务:http://docs.celeryproject.org/en/latest/userguide/canvas.html#chords

因此,您可能需要更改它,例如: 链(task1.s(),task2.s(),和弦(task3.s(),task4.s())(和弦(task5.s()​​,task6.s(),task7.s())( task7.s())))

此外,链/组等总是返回结果并将其传递给子任务,因此您必须相应地对任务参数建模。

因为它是一个非常复杂的工作流程,所以您最好从上一个任务中调用下一个任务(例如,在task1的末尾调用task2.s()。delay())-但我想没有办法对和弦建模。

答案 1 :(得分:0)

这个终于奏效了:

chain(
    task1.s(),
    task2.s(),
    chord([task3.s(), task4.s()], body=task_result.s(), immutable=True), 
    chord([task5.s(), task6.s(), task7.s()], body=task_result.s(), immutable=True), 
    task7.s()
).delay()