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

如何在Celery Chord中自定义任务组task_id并提前获取其ID

解决方案

你可以提前手动生成Group的ID,再将其传入gen_rapport任务,同时在创建Group时指定该ID,无需自定义Chord类就能实现需求。具体操作如下:

  1. 手动生成Group唯一ID:用Celery自带的UUID工具生成ID,确保后续能准确检索Group执行结果。
  2. 创建Group时指定ID:通过group的id参数直接设置提前生成的ID——注意options参数是给组内每个子任务配置参数的,无法给Group本身设置ID,这也是你之前尝试无效的原因。
  3. 将Group ID传入报告任务:定义chord的body时,把Group ID作为参数传给gen_rapport,让任务执行时能直接用这个ID获取组的执行详情。

完整代码示例:

from celery.utils import uuid
from celery import group, chord
from celery.result import GroupResult

# 提前生成唯一的Group ID
group_id = uuid()

# 创建带指定ID的任务组
tasks_group = group([some_task.s() for _ in range(100)], id=group_id)

# 把Group ID传给gen_rapport,同时启动chord
chord(tasks_group, body=gen_rapport.s(group_id)).apply_async()

# 保存Group结果,支持后续检索
group_res = GroupResult(id=group_id, results=[task.id for task in tasks_group.tasks])
group_res.save()

return group_id

对应的gen_rapport任务可编写为:

@app.task
def gen_rapport(group_id):
    # 恢复Group结果,获取执行详情
    group_res = GroupResult.restore(group_id)
    # 编写生成报告的业务逻辑...

这样gen_rapport执行时就能直接拿到Group ID,进而获取整个任务组的执行数据,完全不需要等待chord执行完成后再获取ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:52:14