Django集成Celery启动worker无celery属性及amqp模块缺失如何解决
解决方案
问题1:Module 'flakefinder' has no attribute 'celery' 报错解决
Celery默认会在你通过-A参数指定的模块下寻找名为celery的实例,你当前的Celery实例存放在celeryApp.py文件中,且实例名为app,两种可选修复方案选其一即可:
- 方案1:修改
FlakeFinder/__init__.py文件,添加以下代码,将celery实例导出到模块顶层
改完后即可直接使用原命令from __future__ import absolute_import, unicode_literals from .celeryApp import app as celery __all__ = ('celery',)celery -A FlakeFinder worker -l INFO启动。 - 方案2:启动命令直接指定实例名,将命令改为
celery -A FlakeFinder.celeryApp:app worker -l INFO
问题2:ModuleNotFoundError: No module named 'celery.backends.amqp' 报错解决
该报错是因为Celery 5.0+版本已经正式移除了旧的amqp结果后端,你需要修改Django的settings.py配置:
找到CELERY_RESULT_BACKEND配置项,将值从amqp改为rpc://即可;如果需要持久化存储任务结果,也可以改为django-db(需额外安装django-celery-results依赖包)。
额外配置修正建议
- 你当前
FlakeFinder/tasks.py中的导入路径存在隐患,将from celeryApp import app改为from FlakeFinder.celeryApp import app,避免相对导入找不到模块的问题。 celeryApp.py中定时任务的配置写错了任务名,将'task': 'scraping.tasks'改为'task': 'FlakeFinder.tasks.update_snow_locs',否则定时任务触发时会找不到对应的执行函数。
内容的提问来源于stack exchange,提问作者adamcircle
相关产品推荐
相关产品推荐

