在此tutorial之后,我尝试首次设置Django&Celery&Rabbit。我在Windows上使用Django 2.0 Celery 4.2.0和Rabbit
我遇到错误:celery.exceptions.NotRegistered:'GeneratePDF'
我的设置如下:
在我的 init .py中:
from __future__ import absolute_import, unicode_literals
import celery
from .celery import app as celery_app
__all__ = ['celery_app']
在我的celery.py中:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'abc.settings')
app = Celery('abc')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
在我的task.py中:
from celery import shared_task
from abc.celery import app
@shared_task(name='GeneratePDF')
class GeneratePDF(View):
def get(self, request, *args, **kwargs):
....
在我的views.py中:
from abc.tasks import GeneratePDF
@method_decorator(login_required, name='dispatch')
class ClientProfilePDF(RedirectView):
def get(self, request, *args, **kwargs):
GeneratePDF.delay(request)
return HttpResponseRedirect('/home/')
在我的settings.py中:
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'django-db'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Australia/Sydney'
CELERY_IMPORTS = ('abc.tasks',)
任何人都可以向我指出我要去哪里的地方以及为什么我会收到此错误的正确方向吗?任何帮助深表感谢!
答案 0 :(得分:0)
两件事:
app.autodiscover_tasks()
,芹菜alreayd知道如何使用settings.INSTALLED_APPS
。@shared_task
装饰器用于生活在没有实例化应用程序的celery.py
文件的应用程序中的任务。从外观上看,您的tasks.py
文件与celery.py
文件位于同一Django应用程序中。在这种情况下,您应该使用@app.task
而不是@shared_task
。开始之前,您可以通过执行celery -A myapp inspect registered
获得已注册任务的列表。这样一来,您就可以查看您的GeneratePDF
任务是否已注册。