13

新しくインストールされたセロリとdjango 1.4を使用した次のセットアップがあります。

settings.py:

import djcelery
djcelery.setup_loader()

BROKER_HOST = 'localhost'
BROKER_PORT = 5672
BROKER_USER = 'user'
BROKER_PASSWORD = 'password'
BROKER_VHOST = 'test'

[...]

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'djcelery',
    'south',
    'compressor',
    'testapp',
]

testapp/tasks.py:

from celery.task import task

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

celeryd へのメッセージ配信は正常に機能しますが、タスクは常に登録解除されます (そのため、ここでは自動検出が正しく機能していないようです)。タスクにタスクモジュールをインポートした場合にのみtasks/__init__.py見つかり、使用できます。

また、ドキュメンテーションはデコレータのインポートについて少し混乱していましたが、これは正しいものだと思います。

セットアップのどこにバグがありますか?

4

7 に答える 7

33

settings.pyに追加CELERY_IMPORTSします。

CELERY_IMPORTS = ('testapp.tasks',)

testapp.tasks.__init__ファイル内のすべてのタスクをインポートします

次に、 Celeryはtestapp.tasksフォルダーからすべてのタスクをインポートし、そのまま名前を付けます。

于 2012-04-19T20:40:40.520 に答える
12

これは django-celery 2.5.4 のバグでした。2.5.5 にアップグレードしてください!

于 2012-04-19T22:17:46.830 に答える
5

django 1.4.1 celery 3.0.9 でも同じ問題が発生し、タスクに名前を付けて修正しました。

@task() -> @task(name='testapp.tasks.add')

于 2012-08-31T22:31:28.360 に答える