我需要对 Celery 中的一些任务进行排序,其中一些应该作为单个任务,一些应该并行工作,当组中的任务完成时,它应该通过下一个任务:
chain(
task1.s(),
task2.s(),
group(task3.s(), task4.s()),
group(task5.s(), task6.s(), task7.s()),
task7.s()
).delay()
但我认为我做错了。有人知道该怎么做吗?
另外,我不在乎将每个任务的结果发送给其他人。
这个终于奏效了:
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()
这听起来像一个和弦,即你并行执行任务并在并行任务完成后回调到另一个任务:http://docs.celeryproject.org/en/latest/userguide/canvas.html#chords
因此,您可能需要将其更改为: chain(task1.s((, task2.s((, chord(task3.s((, task4.s((((chord(task5.s((, task6.s
((, task7.s((((task7.s((((此外,链/组等总是返回结果并将其传递给子任务,因此您必须相应地对任务参数进行建模。
由于这是一个相当复杂的工作流程,因此最好从上一个任务中调用下一个任务(例如在任务1结束时调用task2.s((.delay(( - 但我想没有办法对和弦进行建模。