web-dev-qa-db-ja.com

セロリがCELERY_ALWAYS_EAGER設定を選択しない

私はDjango 1.8 + Celery 4.0.2を実行しています。Celeryは適切に構成されており、redisバックエンドでローカルにDjangoタスクを実行できます。しかし、CELERY_ALWAYS_EAGER = True設定、この設定は効果がありません。これは、他の設定には当てはまりません。 CELERY_TIMEZONE

具体的には、pdbにはapp.conf.task_always_eagerFalseです

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が古い設定名から新しい設定名に移行しつつあることは知っていますが、古い設定名も引き続き使用されることを約束しています。

12
AlexA

CELERY_ALWAYS_EAGERは、バージョン4.0以降でCELERY_TASK_ALWAYS_EAGERに名前が変更されました。

より正確には、セロリアプリオブジェクトを直接構成するために、すべて大文字の設定が廃止され、いくつかはtask_またはworker_を接頭辞として使用するように名前空間が設定されました。オールキャップス設定との下位互換性がまだあるため、これにより間接的にオールキャップス設定の名前も変更されました。

changelog から:

Celery_プレフィックスも削除され、この名前空間からのタスク関連設定の前にtask_が付けられ、worker関連設定にはworker_が付けられます。

20
GDorn

Settings.pyでCELERY_ALWAYS_EAGER = Trueを設定した後、セロリワーカーを再起動して、それが役立つかどうか確認してください。

0
Maninder Singh