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("任务未完成")
关键点:
result.get()是阻塞调用,会等待任务完成(可设置超时timeout参数)result.ready()检查任务是否完成result.state查看当前状态(PENDING、SUCCESS、FAILURE 等)
什么情况下需要直接访问 Redis?
- 调试时查看原始存储数据
- 需要批量清理过期结果
- 自定义监控工具
一句话总结:用 Celery 的 AsyncResult API,别直接怼 Redis。
是我自己 sb 了 代码里有一句 celery.control.purge()忘了注释 导致结果都清掉了 自作孽啊~~

