You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Celery任务调度:并行任务完成后执行后续任务(无需传递结果)

解决Celery任务顺序执行且不传递参数的问题

方案1:使用Chord结合Immutable Signature

Celery的chord原生支持等待一组并行任务全部完成后执行回调,而通过si()(Immutable Signature)创建的任务签名会忽略所有传入参数,刚好匹配你不需要传递前两个任务结果给xsquare的需求。

修改后的代码如下:

@app.task
def xsum():
    return sum(i + i for i in range(100))

@app.task
def xmult():
    return sum(i * i for i in range(100))

@app.task
def xsquare():
    return sum(i * i for i in range(100))

# 创建并行执行的任务组
xsum_mult_group = group(xsum.s(), xmult.s())
# 用chord绑定组任务与回调,si()确保xsquare不接收任何参数
chord(xsum_mult_group)(xsquare.si())

关键说明

  • group(xsum.s(), xmult.s()):生成并行任务组,xsum和xmult会同时启动执行
  • xsquare.si():si()是signature(immutable=True)的简写,生成的签名会自动忽略所有传入的参数,避免前两个任务的返回值被传递给xsquare
  • chord(组任务)(回调任务):chord会阻塞等待组内所有任务执行完毕,再触发回调任务,严格保证执行顺序

方案2:使用Chain串联Group与任务

如果更习惯用chain,也可以直接把并行任务组和xsquare.si()串联起来,效果完全一致:

from celery import chain

chain(xsum_mult_group, xsquare.si()).apply_async()

这样xsum和xmult并行执行完成后,会自动触发xsquare,且不会传递任何参数。

内容的提问来源于stack exchange,提问作者Aditya Ganguli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:42:15