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()

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值