You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+Celery+RabbitMQ任务未注册错误求助

解决Celery任务未注册错误的方案

1. 对齐任务注册名称与调用名称

错误显示任务被识别为tasks.MeetingRoom.MeetingRoomSMSNotification.queue_test,但你的Celery实例配置的include路径是sequre_spacement_backend.tasks.MeetingRoom.MeetingRoomSMSNotification,两者路径前缀不匹配。

  • 显式指定任务名称,消除路径歧义:
    在任务定义的MeetingRoomSMSNotification.py中,给装饰器添加name参数:
    from sequre_spacement_backend import celery
    
    @celery.task(name='sequre_spacement_backend.tasks.MeetingRoom.MeetingRoomSMSNotification.queue_test')
    def queue_test():
        # 任务逻辑代码
    
  • 确保调用任务时,使用的名称和上述name参数一致,或者直接调用函数对象(queue_test.delay())而非字符串名称。

2. 修正Worker启动命令

启动Celery Worker时,必须指定正确的Celery实例所在模块,确保Worker能加载到任务:

celery -A sequre_spacement_backend worker --loglevel=info

这里的-A sequre_spacement_backend要指向包含你Celery实例定义的模块。

3. 清理RabbitMQ中的旧任务

错误日志显示任务是redelivered: True,说明队列中存在之前发送的路径不匹配的旧任务,需要清空默认队列:

  • 通过RabbitMQ管理界面找到celery队列,执行清空或删除操作;
  • 或使用命令行工具:
    rabbitmqctl purge_queue celery
    

4. 确保项目路径被Python识别

检查项目根目录是否在Python的sys.path中:

  • 启动Worker时,切换到项目根目录运行命令;
  • 或设置环境变量:
    export PYTHONPATH="/path/to/your/project/root"
    

确保sequre_spacement_backend模块能被正确导入。

5. 验证任务模块的Celery实例引用

在MeetingRoomSMSNotification.py中,必须导入你主模块中定义的Celery实例,不能重新创建新实例:

# 正确:引用主模块的Celery实例
from sequre_spacement_backend import celery

# 错误:避免重新创建实例
# celery = Celery(...)

内容的提问来源于stack exchange,提问作者Selvamani P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:57:22