Django和芹菜,AppRegisteredNotReady异常



我正在尝试将芹菜集成到我的Django项目中。我遵循了芹菜文档,并且可以执行一个简单的Hello World任务。但是当我尝试将我的模型导入到我的任务定义中时,我得到了AppRegisteredNotReady异常。我找到了一些关于这个例外的旧讨论,但没有最新的。我可能遗漏了一些很简单的东西。

Python 3.5, Django 1.9, Celery 3.1.23

Celery.py:

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')  # pragma: no cover
app = Celery('autopool')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))  # pragma: no cover

autopool/ init . py:

from __future__ import absolute_import
from autopool.celery import app as celery_app  # noqa

应用程序池/tasks.py:

from __future__ import absolute_import
from celery import shared_task
@shared_task
def send_period_mail(period_id):
    print("Mail sent for period " + period_id)

我用以下命令启动芹菜:

celery -A autopool worker -l info

从我的观点来看,我执行:

import .tasks send_period_mail
send_period_mail(period_id=period.id)

一切正常

然而,当我尝试向任务添加模型时:

from __future__ import absolute_import
from celery import shared_task
from .models import Period
@shared_task
def send_period_mail(period_id):
    print("Mail sent for period " + period_id)

现在当我尝试启动芹菜时,我收到AppRegisteryNotReady:应用程序尚未加载异常。

全栈跟踪:http://pastebin.com/kmJZLHpT

有人知道吗?

因为当celery.py文件被导入时,Django还没有加载应用程序/模型(所以它无法导入模型from .models import Period),所以将导入移到函数

@shared_task
def send_period_mail(period_id):
    from .models import Period
    print("Mail sent for period " + period_id)

所以它只会在函数被调用时才会被加载(Django已经准备好了)

Marco的回答有效。谢谢你,马克。

我还发现我可以通过从autodiscover_tasks()设置中删除force=True来修复它。

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)更改为app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

相关内容

  • 没有找到相关文章

最新更新