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



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

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

这是我的 celery.py

from celery import Celery
from celery import shared_task
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
app = Celery('projectname')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
from app1.models import *
@share_task
def tasks():
''' '''

每次我尝试使用这一行将models导入celery.py文件时,from app1.models import *我得到:

django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。

本地服务器突然停止工作。 这篇文章与类似的问题有关,但不确定这里的情况是否如此。

我想要的是将一些模型导入到文件中,以便我可以将它们用于某些查询。

我对可能出错的地方有一点线索,但不确定。

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

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

问题是当你尝试在 Django 加载 configuration(( 之前上传你的任务

from app1.models import *

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
app = Celery('projectname')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

当然,Celery 会检测celery.py文件中的任务,请记住,您已经导入了从celery.py__init__.py的所有内容,以便让 Django 在每次项目启动时加载它们(Celery stuff,...(。

__init__.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 加载其配置之前导入,而您settings.py中的应用程序尚未构建。

你不应该将 Django 应用程序的东西导入到你的__init__.py文件中,模块/应用程序是在 Django 加载配置(settings.py(之前构建的,这将引发一个错误,如果你尝试像models一样上传__init__.py文件中的应用程序尚未加载

根据文档,Celeryapp.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

任务可以在celery.py文件中工作,但在从应用程序上传模型时不能,请改用 app.autodiscover_tasks((

如果需要,还可以使用从未来进口的绝对值

from __future__ import absolute_import

相关内容

  • 没有找到相关文章

最新更新