django 1.11 与 celery 4.0 和 djcelery 兼容性问题

Posted

技术标签:

【中文标题】django 1.11 与 celery 4.0 和 djcelery 兼容性问题【英文标题】:django 1.11 with celery 4.0 and djcelery compatibility issues 【发布时间】:2017-10-26 13:16:14 【问题描述】:

我目前使用 django 1.11,出于兼容性原因,我不得不使用旧版本的 celery (3.1)。

我想升级到 celery 4.0,因为我们应用程序的另一部分需要更高版本的 celery。

是否有兼容的 celery、django-celery 和 django 1.11 的组合?文档说 celery 4.0 从 1.8 开始与所有版本的 django 兼容,但事实并非如此。

例如当我使用时会发生错误:

python manage.py makemigrations <appname>

这是我收到的错误消息:

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 337, in execute
django.setup()
File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 108, in populate
app_config.import_models()
File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/usr/local/lib/python2.7/dist-packages/djcelery/models.py", line 16, in <module>
from . import managers
File "/usr/local/lib/python2.7/dist-packages/djcelery/managers.py", line 18, in <module>
from celery.utils.timeutils import maybe_timedelta
ImportError: No module named timeutils

如果我恢复到 celery 3.1,它可以工作。

【问题讨论】:

我非常怀疑 Celery 4 和 Django 1.11 之间是否存在任何in兼容性。是什么让你觉得有?您究竟遇到了哪些不兼容问题? 添加了错误回溯。好奇为什么投反对票? 【参考方案1】:

...文件“/usr/local/lib/python2.7/dist-packages/djcelery/managers.py”,第 18 行,在 ...

您正在使用django-celery,这是一个库,即no longer required since celery 3.1

以前版本的 Celery 需要一个单独的库才能使用 Django,但从 3.1 开始不再是这种情况。支持 Django 现在开箱即用...

INSTALLED_APPS 中删除djcelery,按照链接的文档查看是否还有其他需要更新的内容。

【讨论】:

以上是关于django 1.11 与 celery 4.0 和 djcelery 兼容性问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 1.11 中运行 celery worker

在 Django 1.11 中将 QuerySet 传递给 Celery 任务

html Django 1.11 Pagination with Bootstrap 4.0

用supervisord运行芹菜无法发现任务

Celery 3 版本 定时执行与 异步执行 | Django 案例

Celery学习---Celery 与django结合实现计划任务功能