本文主要是介绍django2.2 celery4.4 cannot import name Celery / Unable to load celery application,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景
按照celery官方教程编写代码,执行worker时一直报错 cannot import Celery
解决方案
出现这个问题的原因是执行celery时,不要再celery.py目录下启动worker,而是在manage.py目录下启动worker,其中celery_app.py也可以命名为celery.py
我的项目目录是这样的
启动职程(worker)的时候按照下面的命令去执行,需要在项目的根目录下运行(manage.py目录下运行)
接下来是重点,启动worker时,需要用--app参数app所在的位置,也就是我们celery_app.py中定义的
app = Celery('do')
的Celery instances所在的位置
celery -A --app=DeviceOperations.celery_app:app worker --loglevel=info ## windows环境下增加 --pool=solo选项
celery -A --app=DeviceOperations.celery_app:app worker --pool=solo --loglevel=info
其中do是我的celery app的名称。
如果未指定app位置则会报错
Error:
Unable to load celery application.
The module do was not found.
这个地方也是官方文档比较坑的地方
部分关键代码 celery_app.py
# celery_app.py# -*- coding: utf-8 -*-
from __future__ import absolute_import import os
from celery import Celery# 只要是想在自己的脚本中访问Django的数据库等文件就必须配置Django的环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'DeviceOperations.settings')# app名字
app = Celery('do')# 配置celery,这个地方我只是简单配置了一下,配置到setting中会更好
class Config:BROKER_URL = 'redis://localhost'CELERY_RESULT_BACKEND = 'redis://localhost'app.config_from_object(Config)
# 到各个APP里自动发现tasks.py文件
app.autodiscover_tasks()
这篇关于django2.2 celery4.4 cannot import name Celery / Unable to load celery application的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!