为什么 Celery 5 需要 djcelery?

问题描述

我正在实施芹菜 documentation 所说的内容

芹菜.py

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE','proj.settings')
broker = 'sqla+postgresql://user:pass@localhost/db'

app = Celery('proj',broker=broker)

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings',namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

我面临的错误

[2021-05-18 03:21:29,974: CRITICAL/MainProcess] Unrecoverable error: ModuleNotFoundError("No module named 'djcelery'")
Traceback (most recent call last):
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/app/base.py",line 1211,in backend
    return self._local.backend
AttributeError: '_thread._local' object has no attribute 'backend'

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/worker/worker.py",line 203,in start
    self.blueprint.start(self)
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/bootsteps.py",line 112,in start
    self.on_start()
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/apps/worker.py",line 136,in on_start
    self.emit_banner()
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/apps/worker.py",line 170,in emit_banner
    ' \n',self.startup_info(artlines=not use_image))),File "/Users/proj/venv/lib/python3.9/site-packages/celery/apps/worker.py",line 232,in startup_info
    results=self.app.backend.as_uri(),File "/Users/proj/venv/lib/python3.9/site-packages/celery/app/base.py",line 1213,in backend
    self._local.backend = new_backend = self._get_backend()
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/app/base.py",line 916,in _get_backend
    backend,url = backends.by_url(
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/app/backends.py",line 70,in by_url
    return by_name(backend,loader),url
  File "/Users/proj/venv/lib/python3.9/site-packages/celery/app/backends.py",line 50,in by_name
    cls = symbol_by_name(backend,aliases)
  File "/Users/proj/venv/lib/python3.9/site-packages/kombu/utils/imports.py",line 56,in symbol_by_name
    module = imp(module_name,package=package,**kwargs)
  File "/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py",line 127,in import_module
    return _bootstrap._gcd_import(name[level:],package,level)
  File "<frozen importlib._bootstrap>",line 1030,in _gcd_import
  File "<frozen importlib._bootstrap>",line 1007,in _find_and_load
  File "<frozen importlib._bootstrap>",line 972,in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>",line 228,in _call_with_frames_removed
  File "<frozen importlib._bootstrap>",line 984,in _find_and_load_unlocked
ModuleNotFoundError: No module named 'djcelery'

现在如果我安装 djanog-celery 那么它最终会卸载 celery 5 并安装 celery 3.1。并且文档说 celery 5 不需要安装任何其他库。不知道为什么需要这种依赖。

下面是pip freeze的输出

amqp==5.0.6
anyjson==0.3.3
appnope==0.1.2
asgiref==3.3.1
backcall==0.2.0
billiard==3.6.4.0
celery==5.0.5
certifi==2020.12.5
chardet==4.0.0
click==7.1.2
click-didyoumean==0.0.3
click-plugins==1.1.1
click-repl==0.1.6
decorator==4.4.2
Django==3.1.7
django-choices==1.7.1
django-cors-headers==3.7.0
djangorestframework==3.12.4
greenlet==1.1.0
idna==2.10
ipython==7.21.0
ipython-genutils==0.2.0
jedi==0.18.0
kombu==5.0.2
numpy==1.20.1
pandas==1.2.3
pandas-ta==0.2.45b0
parso==0.8.1
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.16
psycopg2==2.8.6
ptyprocess==0.7.0
Pygments==2.8.1
python-dateutil==2.8.1
python-memcached==1.59
pytz==2021.1
requests==2.25.1
scipy==1.6.1
six==1.15.0
sqlAlchemy==1.4.15
sqlparse==0.4.1
technical-indicators-lib==0.0.2
tqdm==4.59.0
traitlets==5.0.5
urllib3==1.26.3
vine==5.0.0
wcwidth==0.2.5
XlsxWriter==1.3.9

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...