Python分布式任务队列Celery的结果存储在Redis中,还需要手动从Redis获取吗?

一个脚本调用任务是可以取结果的,但是我想在另外的机器上用 id 来取结果,发现任务执行完一段时间后就取不了了,状态变成 pending,但是结果在 redis 里躺着好好的。难道是要自己去 redis 里 get 吗?
Python分布式任务队列Celery的结果存储在Redis中,还需要手动从Redis获取吗?

2 回复

Celery 提供了专门的结果后端接口来获取任务结果,通常不需要直接操作 Redis。

标准做法是使用 AsyncResult 对象:

from celery.result import AsyncResult
from your_celery_app import app  # 导入你的 Celery 应用实例

# 提交任务
async_result = your_task.delay(args)

# 通过 task_id 获取结果对象
result = AsyncResult(async_result.id, app=app)

# 检查状态
if result.ready():
    # 获取结果值
    task_result = result.get()
    print(f"任务结果: {task_result}")
else:
    print("任务未完成")

关键点:

  1. result.get() 是阻塞调用,会等待任务完成(可设置超时 timeout 参数)
  2. result.ready() 检查任务是否完成
  3. result.state 查看当前状态(PENDING、SUCCESS、FAILURE 等)

什么情况下需要直接访问 Redis?

  • 调试时查看原始存储数据
  • 需要批量清理过期结果
  • 自定义监控工具

一句话总结:用 Celery 的 AsyncResult API,别直接怼 Redis。


是我自己 sb 了 代码里有一句 celery.control.purge()忘了注释 导致结果都清掉了 自作孽啊~~

回到顶部