应用程序尚未在尝试在 雪花菜任务文件中导入模型时加载

2024-04-24 12:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在任何解释之前,这里是我的项目树

| projectname
|____|__init__.py
|____|celery.py
|____|settings.py
|____|urls.py
|____|wsgi.py
|app1
|app2

这是我的芹菜.py在

^{pr2}$

每次我尝试将models导入到celery.py文件时,我得到的是:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

本地服务器突然停止工作。 This post与一个类似的问题有关,但不确定是否是这种情况。在

我想要的是导入一些模型到文件中,这样我就可以使用它们进行一些查询。

我有一点线索,但不确定。在

viewsmodels.py
viewscelery.py导入需要执行的任务
celery.py尝试从models导入内容。在

所以那个像蛇咬自己尾巴的圆圈对我来说很奇怪。在


Tags: 文件项目pywsgisettingsinitmodelsurls
1条回答
网友
1楼 · 发布于 2024-04-24 12:37:14

问题是当您试图在Django加载configuration()之前上载任务时,

^{pr1}$ ^{pr2}$

Off-course Celery将检测celery.py文件中的任务,请记住,您已经导入了从celery.py到{}的所有内容,以便让Django在每次项目启动时加载它们(celeri stuff,…)。在

初始化py

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ['celery_app']

所以在这个例子中,您要导入celery.py文件中的模型,比如说__init.py__,您的模型将在Django加载其配置之前导入,而您的{}中的应用程序尚未构建。在

不应将Django应用程序填充导入到__init__.py文件中,模块/应用程序是在Django加载配置之前生成的(设置.py),如果您尝试像__init__.py文件中的models那样上传,则会引发一个错误应用程序尚未加载。在

根据the documentation的说法,Celery app.autodiscover_tasks()能够在settings.INSTALLED_APPS中发现任何注册良好的应用程序中的所有任务。不要在celery.py中导入任务,只需在所有应用程序中创建一个tasks.py文件。在

| projectname
|____|__init__.py
|____|celery.py # contains app.autodiscover_tasks()
|____|settings.py
|____|urls.py
|____|wsgi.py
|app1
|____|tasks.py
|app2
|____|tasks.py

Tasks may work in celery.py file, but not when uploading Model from apps, use app.autodiscover_tasks() instead

Use as well absolute imports from the future if needed

from __future__ import absolute_import

相关问题 更多 >