celery任务不消费的主因是worker未收到消息,常见于队列名不匹配、反序列化失败或broker连接异常;需用inspect active_queues和debug日志交叉验证队列监听与模块导入状态。

任务不消费,八成不是代码写错了,而是 Worker 根本没拿到消息——要么消息压根没进对的队列,要么进了队列但 Worker 拒绝反序列化、甚至根本没监听那个队列。
检查 celery -A your_app inspect active_queues 是否显示目标队列
Worker 启动后必须明确监听你发任务用的队列名。哪怕只差一个下划线或大小写错误,RabbitMQ 就会把消息扔进 amq.gen-xxx 临时队列,Worker 完全看不到。
- 启动 Worker 时加
-Q my_queue显式指定队列,别依赖默认 -
celery -A your_app inspect active_queues输出里必须有my_queue,且consumer_count > 0 - 如果输出为空或只有
celery队列,说明task_routes配置没生效,或app.autodiscover_tasks()没扫到带@app.task的模块
看 Worker 日志里有没有 Received unregistered task 或 No module named
这是反序列化失败的典型信号:消息已从 Broker 拉出,但在转成 Python 对象时卡住,静默丢弃。不会报错,也不会进 active 列表。
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- 启动 Worker 加
--loglevel=debug,重点搜这两类日志 -
Received unregistered task of type 'myapp.tasks.send_email'→ 模块路径对,但该函数没被注册(比如tasks.py没被autodiscover扫到) -
Can't decode body: ValueError: No module named 'myapp.tasks'→ Python 导入失败(PYTHONPATH错、工作目录不对、包结构缺__init__.py) - 确保
broker_url中的 vhost 和 RabbitMQ 实际创建的 vhost 完全一致,不是路径前缀
确认 broker_connection_retry_on_startup = True 并验证 Broker 连通性
Celery 默认不校验 Broker 是否真能连上,而是悄悄退化为内存队列——任务发出去了,但只在当前进程内打转,Worker 根本收不到。
- 加配置
broker_connection_retry_on_startup = True,否则 Worker 启动时 Broker 暂不可用会直接退出 - 手动验证:
redis-cli -u redis://localhost:6379/0 ping应返回PONG;curl -I http://localhost:15672能通 RabbitMQ 管理页 - Broker URL 格式必须匹配服务类型:
redis://对 Redis,pyamqp://或amqp://对 RabbitMQ(注意末尾双斜杠)
用 celery -A your_app inspect ping 和 active 交叉验证
ping 回得快,不代表任务能执行;active 为空,也不代表没消息——得一起看才能排除干扰。
-
celery -A your_app inspect ping返回 OK,说明 Worker 进程活着,管理通道通畅 -
celery -A your_app inspect active为空,但你确定任务已发,就说明消息卡在反序列化或路由阶段 - 如果
ping超时或无响应,先查 Worker 进程是否真在跑(ps aux | grep celery),再查日志里有没有App is not configured类错误
最容易被忽略的是 Worker 进程的工作目录和 PYTHONPATH ——它和你开发时跑 python manage.py runserver 的环境不是一回事,模块导入失败往往就差这一个路径配置。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










