我需要在Celery中对一些任务进行排序,其中一些任务应作为单个任务,而某些则应并行工作,当组中的任务完成时,它应该通过下一个任务:
chain(
task1.s(),
task2.s(),
group(task3.s(), task4.s()),
group(task5.s(), task6.s(), task7.s()),
task7.s()
).delay()
但是我认为我做错了。任何人都知道该怎么做吗?
此外,我不在乎将每个任务的结果发送给其他任务。
答案 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()