Django配置Celery后台任务时报Module 'project_name' has no attribute 'celery'错误
问题根因排查
- celery配置文件位置错误:你将
celery.py放在了app_name1目录下,但启动命令-A project_name会指定Celery去项目根模块/内层和settings.py同目录的project_name包下查找celery属性,自然找不到存放在app目录下的配置文件。 - 配置加载代码错误:
celery.py中app.config_from_object('django.config:settings', namespace='CELERY')写法有误,Django的配置模块是django.conf不是django.config。 - 缺少实例导出配置:内层存放
settings.py的project_name包没有对外暴露celery实例,Celery无法识别到对应的属性。
解决步骤
- 第一步:调整
celery.py存放位置,将app_name1/celery.py移动到和settings.py同目录的project_name文件夹下,调整后项目结构如下:
project_name ├──project_name | ├── __init__.py | ├── settings.py | └── celery.py ├──app_name1 ├──app_name2 | └──tasks.py
- 第二步:修正
celery.py中的配置加载代码:
from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings') app = Celery('project_name') # 替换错误的django.config为django.conf app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
- 第三步:在内层
project_name目录的__init__.py文件中添加如下代码,对外暴露celery实例:
from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ('celery_app',)
- 第四步:确认
settings.py的INSTALLED_APPS列表中已经注册了app_name2,否则Celery自动扫描任务时会找不到你定义的add任务。 - 第五步:回到项目根目录(最外层的
project_name目录),重新执行启动命令即可:celery -A project_name worker -l info --pool=solo
内容的提问来源于stack exchange,提问作者Callum
相关产品推荐
相关产品推荐

