【问题标题】:Execute group task after one group task finished in celery在 celery 中完成一项组任务后执行组任务
【发布时间】:2019-02-22 10:39:27
【问题描述】:

现在我正在我的应用程序中实现 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()

问候,

梅克尔维斯维加亚

【问题讨论】:

    标签: django celery


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      如果您只想将它​​们简单地链接起来,则不太确定您要达到的目标是什么

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-14
        • 2017-03-27
        • 2016-12-09
        • 2014-10-28
        • 2018-03-25
        • 2015-08-01
        • 2019-02-26
        • 1970-01-01
        相关资源
        最近更新 更多