在芹菜中完成一组任务后执行组任务

Execute group task after one group task finished in celery

现在我正在我的应用程序中执行 celery 任务。我希望我的任务执行链接但不知何故,链条不起作用,组工作但链条不起作用。我想要的过程是我希望在处理 GROUP_B 之后处理 GROUP_A 等等。 我试过使用和弦但仍然不知道。下面是我在 celery 中执行组任务的简单链。 谢谢大家的关注。

GROUP_A = []

GROUP_B = []

GROUP_C = []

GROUP_D = []


for i in range(3):

    GROUP_A.append(A.s(i+1))
    GROUP_B.append(B.s(i+1))
    GROUP_C.append(C.s(i+1))
    GROUP_D.append(D.s(i+1))

job = chain(

 group(GROUP_A),

 group(GROUP_B),

 group(GROUP_C),

 group(GROUP_D)

)
job.apply_async()

此致,

Meikelwis Wijaya

不确定我是否完全理解,但是当您使用 s() 调用任务时,它们会传递结果。

在您的任务 A 的情况下,您正在执行 3 个并行任务(组),没有传入任何内容,并将其提供给 B 任务的组。

不太确定你想要达到什么目的,如果你只想将它们链接成一个简单的

chain([D.si(i, 1), C.s(1), B.s(1), A.s(1)])

应该可以,前提是任务都接受 2 个参数

您遇到的问题是,当您将每个组向上传递到后续链时,您必须获得每个组的不可变签名,因为每个组本身就是一个任务(而不是任务的调用):


job = chain(
 group(GROUP_A).si(),
 group(GROUP_B).si(),
 group(GROUP_C).si(),
 group(GROUP_D).si()
)
job.apply_async()