2016-05-23 32 views
2

プロジェクトレベルからセロリ(app)タスクを呼び出す方法(逆も同様) settings.pyでDjangoのアプリケーション/プロジェクト間でセロリのタスクを登録するには?

- proj 
    |_ celery.py 
    |_ settings.py 
- app 
    |_ tasks.py 
    |_ views.py 

は、私がapp/tasksにshared_taskを指しCELERYBEAT_SCHEDULEのVARを持っている:

は、私のようなDjangoのディレクトリ構造を持っています。このタスクは celery inspect registeredに記載されていません。

どちらapps/views.pyの関数から呼び出す彼らはproj/celery.pyで定義されていましたので、がレジストリにを列挙されているタスクです。

セロリのウェブサイトの指示に従っています。

答えて

2

shared_taskデコレータ内の関数は、App Appfigにリストされている必要があります。

import celery 
from celery import shared_task 

Pycharm文句を言うだろう:そうは次のようにproj/celery.py輸入shared_taskで

from proj.celery import shared_task 

:そうのようなapp/tasks.py輸入shared_taskで

from .tasks import add 

app/apps.pyの下

はそうのようなあなたのタスクをインポート未使用輸入についてこれらのファイルは使用されていますが、pycharmは解析中ではありません。

は今、私は次のようにセロリワーカーを起動したとき:app/tasks.py

python manage.py celeryd --loglevel=DEBUG & 

ではなく

celery -A pears worker --loglevel=info & 

マイタスクの登録、呼び出し可能です。

+0

セロリ "app.autodiscover_tasks"の設定に応じて使い方が異なる場合があります。この回答は、書いているときのデフォルトである "lambda:settings.INSTALLED_APPS"と "INSTALLED_APPS = ['app.apps.AppConfig'、...]'を使用していることを前提としています。 – J0hnG4lt

+1

これは最高の答えだと思います。http://stackoverflow.com/a/38836969/3061689 – eddwinpaz

関連する問題