2016-08-05 47 views
2

的 'appname.tasks.add' 未註冊的任務繼文檔和這裏的演示Django項目https://github.com/celery/celery/tree/3.1/examples/djangoDjango的芹菜收到類型

項目結構

piesup2 
    | 
    piesup2 
    | |__init__.py 
    | |celery.py 
    | |settings.py 
    | |urls.py 
    reports 
     |tasks.py 
     |models.py 
     |etc.... 

我的代碼

piesup2/celery.py

from __future__ import absolute_import 

import os 

from celery import Celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'piesup2.settings') 

from django.conf import settings # noqa 

app = Celery('piesup2') 

# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

piesup2/__init__.py

from __future__ import absolute_import 

# 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 # noqa 

piesup2/reports/tasks.py

from __future__ import absolute_import 

from celery import shared_task 


@shared_task 
def add(x, y): 
    return x + y 

在命令行用芹菜開始後:

celery -A piesup2 worker -l info 

當我試圖從我的models.py文件中運行任務像這樣:

def do_stuff(self): 
    from reports.tasks import add 
    number = add.delay(2, 2) 
    print(number) 

我得到以下錯誤:

[2016-08-05 16:50:31,625: ERROR/MainProcess] Received unregistered task of type 'reports.tasks.add'. The message has been ignored and discarded.

Did you remember to import the module containing this task? Or maybe you are using relative imports? Please see http://docs.celeryq.org/en/latest/userguide/tasks.html#task-names for more information.

The full contents of the message body was: {'callbacks': None, 'retries': 0, 'chord': None, 'errbacks': None, 'task': 'reports.tasks.add', 'args': [2, 2], 'timelimit': [None, None], 'kwargs': {}, 'id': 'b12eb387-cf8c-483d-b53e-f9ce0ad6b421', 'taskset': None, 'eta': None, 'expires': None, 'utc': True} (258b) Traceback (most recent call last): File "/home/jwe/piesup2/venv/lib/python3.4/site-packages/celery/worker/consumer.py", line 456, in on_task_received strategies[name](message, body, KeyError: 'reports.tasks.add'

回答

8

在你的Django設置您需要添加具有芹菜任務每個模塊CELERY_IMPORTS

CELERY_IMPORTS = (
    'reports.tasks', 
    'some_app.some_module', 
)