次のチュートリアルのように、Django-celeryアプリケーションを作成しました。
http://docs.celeryproject.org/en/master/Django/first-steps-with-Django.html
次のようにアプリケーションパラメータなしで実行すると、すべて正常に動作します。
$ python manage.py celery worker -l info
しかし、次のように、アプリケーションパラメータでそれを開始することはできません。
$ python manage.py celery worker -A myapp -l info
ここで、myappは、プロジェクトを作成したときにアプリケーションに付けられた名前です。
$ python manage.py startapp myapp
私が得ているエラーは次のとおりです。
ImportError: No module named celery
なぜこれが起こるのか、そしてそれを解決する方法を誰かが知っていますか?
2014年4月の編集:
Celeryのドキュメントが3.1用に更新されました。以下のソリューションは現在古くなっています。以下を参照してください。
http://docs.celeryproject.org/en/master/Django/first-steps-with-Django.html
デフォルトでは、celeryはcelery.py
という名前のモジュールを検索してその構成を見つけます。 celery.py
とは異なる名前を使用するようにセロリを取得するには、 アプリの引数にあります -を指定します。この例では、settings.py
でセロリの構成を検索します。
python manage.py celery worker --app=myapp.settings
Django-celery
を使用する場合は、上記の呼び出しを使用してセロリを開始するか、最初に行ったように実行して、アプリケーションパッケージmyapp
にcelery.py
を作成します。
from settings import celery
私のDjango settings.py
には通常のセロリ設定が含まれています:
from celery import Celery
celery = Celery(broker="amqp://guest:[email protected]:5672//")
celery.conf.update(
CELERY_DEFAULT_QUEUE = "myapp",
CELERY_DEFAULT_EXCHANGE = "myapp",
CELERY_DEFAULT_EXCHANGE_TYPE = "direct",
CELERY_DEFAULT_ROUTING_KEY = "myapp",
)
次に、次のようにセロリワーカーを実行します。
python manage.py celery worker --app=myapp
わかりやすくするために、これが私の完全なアプリケーション構造です。
myproject/
manage.py
myapp/
__init__.py
settings.py
celery.py
セロリモジュールにアクセスできるディレクトリからセロリワーカーを起動しようとしていることを確認してください。私の場合、プロジェクトではなくアプリディレクトリからワーカーを起動しようとしていました。