Celery任务持续处于PENDING状态,请求故障排查
Celery任务一直处于PENDING状态的原因分析
1. Worker启动的应用入口错误
你启动Worker时使用的命令是:
celery -A tasks worker --loglevel=DEBUG
但你的Celery实例app定义在celery_app.py中,-A参数需要指定包含Celery应用实例的模块,正确的启动命令应该是:
celery -A celery_app worker --loglevel=DEBUG
错误的入口会导致Worker无法正确识别任务队列,进而无法接收和处理任务。
2. 任务调用代码位置错误
你在tasks.py中直接编写了任务调用代码:
result = add.delay(2, 5) print(result.status) result.get()
当Worker加载tasks模块时,这段代码会自动执行并发送任务。如果此时Worker还未完全启动,或者Worker没有监听对应的队列,任务就会一直处于PENDING状态。
正确的做法是将任务调用代码拆分到单独的脚本中,比如新建run_task.py:
from tasks import add result = add.delay(2, 5) print(result.status) print(result.get())
先启动Worker,再运行这个脚本发送任务。
3. 潜在的队列配置或Redis连接验证点
虽然你提到Redis中生成了新键,但仍需确认:
- Celery的broker和backend配置的数据库编号(0和1)是否正确,Worker是否连接到了同一个Redis数据库
- 如果后续将Worker部署到Docker容器中,需要将Celery配置中的
localhost替换为Docker Compose中的服务名redis,否则容器内无法访问本地Redis
内容的提问来源于stack exchange,提问作者ehsan shirzadi
相关产品推荐
相关产品推荐

