私はDjango 1.8 + Celery 4.0.2を実行しています。Celeryは適切に構成されており、redisバックエンドでローカルにDjangoタスクを実行できます。しかし、CELERY_ALWAYS_EAGER = True
設定、この設定は効果がありません。これは、他の設定には当てはまりません。 CELERY_TIMEZONE
具体的には、pdb
にはapp.conf.task_always_eager
はFalse
です
lib/python2.7/site-packages/celery/app/task.py(520)apply_async()したがって、どういうわけかCELERY_ALWAYS_EAGERは取得されず、app.conf.task_always_eagerには影響しません
Pdbからの詳細情報:
> app.conf.get('CELERY_ALWAYS_EAGER')
> True
> app.conf.task_always_eager
> False
何が原因ですか? Celery 4.xが古い設定名から新しい設定名に移行しつつあることは知っていますが、古い設定名も引き続き使用されることを約束しています。
CELERY_ALWAYS_EAGER
は、バージョン4.0以降でCELERY_TASK_ALWAYS_EAGER
に名前が変更されました。
より正確には、セロリアプリオブジェクトを直接構成するために、すべて大文字の設定が廃止され、いくつかはtask_
またはworker_
を接頭辞として使用するように名前空間が設定されました。オールキャップス設定との下位互換性がまだあるため、これにより間接的にオールキャップス設定の名前も変更されました。
changelog から:
Celery_プレフィックスも削除され、この名前空間からのタスク関連設定の前にtask_が付けられ、worker関連設定にはworker_が付けられます。
Settings.pyでCELERY_ALWAYS_EAGER = Trueを設定した後、セロリワーカーを再起動して、それが役立つかどうか確認してください。