Mac系统下Celery任务执行成功但查询状态始终为PENDING问题求助
核心问题原因
问题的核心是你创建了两个完全独立、配置不统一的Celery实例,导致任务执行结果无法被正确查询:
- 第一个初始化的实例名为
project,配置了result_backend = 'rpc://',同时关联了Django项目配置 - 定义
some_task时你又重新初始化了一个名为spotifycluster的新实例,这个实例没有配置result_backend,任务执行完成后结果不会上报到后端存储,因此你查询时状态永远为PENDING
修复方案
1. 统一Celery实例(最优先推荐)
不要重复初始化Celery实例,所有任务都复用同一个关联了全量配置的实例:
# 假设你最初的Celery实例定义在project/celery.py中,直接导入使用即可 from project.celery import app import time @app.task def some_task(X): time.sleep(2) return sum(X)
2. 统一查询状态的入口
不要直接调用无绑定的AsyncResult构造方法,通过统一的Celery实例来查询任务状态,自动复用实例的backend配置:
from project.celery import app task = some_task.delay(features) task_id = task.task_id state = app.AsyncResult(id=task_id).state
3. 可选:多实例配置对齐
如果你确实需要保留多个Celery实例,需要确保所有实例的以下配置完全一致:
- broker地址
- result_backend地址
- 任务序列化、结果序列化规则
- 任务命名空间配置
额外校验项
如果完成上述配置后问题依然存在,检查任务装饰器是否添加了ignore_result=True参数,该参数会强制关闭任务结果上报,也会导致状态一直显示为PENDING。
注意:rpc后端的任务结果默认是一次性的,被消费后就会自动删除,如果需要多次查询任务结果,建议切换为redis、django-db等持久化后端
内容的提问来源于stack exchange,提问作者DSteman
相关产品推荐
相关产品推荐

