Django导入搞砸了Celery



我有一个django项目,它具有以下django项目结构:

project/
...
some_app/
__init__.py
some_module_where_i_import_some_utils.py
server/
__init__.py
settings/
__init__.py
common.py
dev.py
...
celery.py
...
utils/
__init__.py
some_utils.py
manage.py
...

当使用utils时,我以以下方式导入它们:

from project.utils.some_utils import whatever

而且效果很好。但是,当我使用DJANGO_SETTINGS_MODULE=server.settings.dev celery -A server worker --beat -l info运行芹菜工作程序时,autodiscover_tasks失败,并出现以下错误ModuleNotFoundError: No module named 'project'

以下是server/celery.py:的内容

import os
from celery import Celery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings.prod")
app = Celery("server")
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("Request: {0!r}".format(self.request))

这是server/__init__.py:

from .celery import app as celery_app
__all__ = ("celery_app",)

以以下方式修改celery.py即可完成任务:

import os
import sys
from celery import Celery
sys.path.append("..")
...

我不确定这是否会在未来引发问题,如果我能想出更好的办法,我会继续调查并更新答案。

相关内容

  • 没有找到相关文章

最新更新