首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么芹菜5需要djcelery?

为什么芹菜5需要djcelery?
EN

Stack Overflow用户
提问于 2021-05-18 05:59:09
回答 1查看 81关注 0票数 0

我正在执行芹菜documentation所说的。

celery.py

代码语言:javascript
复制
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}')

我所面临的错误。

代码语言:javascript
复制
[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 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 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  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命令的输出

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-11-09 13:44:31

您的芹菜版本是5.0或更高,但是the latest djcelery版本只有3.3.1,版本不匹配,Django似乎不再支持3.3 django-celery之后的芹菜版本。

尽管文档中说celery 5不需要安装任何其他库,但似乎如果您通过API添加定时任务,则必须使用django-celery。如果你只是在设置文件中静态地设置定时任务,你不需要django- celery,只要芹菜就足够了。如果您必须通过API添加定时任务,我建议使用其他库,如: django-apscheduler或django-crontab。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67577554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档