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

Celery如何通过parent_id获取父任务的请求信息与执行结果

Celery 子任务内查询父任务信息的实现方法

你需要提前为Celery实例配置result_backend(如Redis、MySQL等),否则无法存储和查询历史任务的状态、结果与元数据。

核心实现步骤

在pdb断点交互界面直接执行以下代码即可:

# 1. 获取当前任务的父任务ID
parent_id = app.current_task.request.parent_id
# 2. 实例化父任务的异步结果查询对象
parent_task = app.AsyncResult(parent_id)

# 3. 查询父任务运行状态
print(parent_task.state)
# 4. 查询父任务执行结果(仅任务执行完成后可返回有效值)
print(parent_task.result)

查询父任务request上下文的额外配置

默认Celery不会将任务的request上下文存储到结果后端,需要提前添加如下配置:

app = Celery(
    'hello',
    broker='你的broker连接地址',
    result_backend='你的结果后端连接地址',
    # 开启任务启动状态追踪
    task_track_started=True,
    # 开启扩展结果存储,支持保存任务请求元数据(Celery 5.2及以上版本支持)
    result_extended=True
)

配置完成后,就可以通过以下方式获取父任务的request信息:

print(parent_task.info)
# request相关的上下文字段都会存储在info字典中

如果你使用的Celery版本不支持result_extended参数,可以在父任务的返回值中主动嵌入request信息:

@app.task
def your_parent_task():
    # 父任务的业务逻辑
    business_result = "父任务返回结果"
    # 返回时携带request上下文
    return {
        "result": business_result,
        "request_info": app.current_task.request.__dict__
    }

之后在子任务中直接读取parent_task.result.get("request_info")即可拿到父任务的request信息。

注意事项

  • 若父任务还处于待执行、执行中状态,parent_task.result会返回空值或Pending标记,需等待父任务执行完成后才能拿到有效结果
  • 可根据业务需求配置result_expires参数设置任务结果的过期时间,避免结果后端存储资源被占满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:04