9

Celery 3.1.16 ブローカー (RabbitMQ を実行) と、スーパーバイザーによってデーモン化された celeryd を持つ複数の Celery ワーカーを使用しています。問題はタスクの更新にあります。tasks.py ファイルを更新すると、セロリ ワーカーが古いコードを実行します。

セロリ起動コマンド:

/home/my_project/bin/celery -B --autoreload --app=my_app.celery:app worker --loglevel=INFO

django settings.py にタスク ファイルを含めます。

CELERY_IMPORTS = [
    'my_app.tasks'
]

pyinotifyがインストールされ、動作します (そうだと思います)、セロリ ログの一部:

[2014-12-16 20:56:00,016: INFO/MainProcess] Task my_app.tasks.periodic_update_task_statistic[175c2557-7c07-43c3-ac70-f4e115344134] succeeded in 0.00816309102811s: 'ok!'
[2014-12-16 20:56:11,157: INFO/MainProcess] Detected modified modules: ['my_app.tasks']
[2014-12-16 20:57:00,001: INFO/Beat] Scheduler: Sending due task my_app.tasks.periodic_update_task_statistic (my_app.tasks.periodic_update_task_statistic)
[2014-12-16 20:57:00,007: INFO/MainProcess] Received task: my_app.tasks.periodic_update_task_statistic[f22998a9-dcb4-4c29-8086-86dd6e57eae1]

それで、私の質問:変更された場合、セロリの更新を取得して新しいタスクコードを適用する方法は?

4

3 に答える 3

2

セロリには、この問題に関する未解決の問題があり ます https://github.com/celery/celery/issues/1025

于 2016-03-30T12:36:43.150 に答える
1

私はこれと同じ問題を抱えています。私はそれが好きではありませんが、次のことを行います。これは、最初に現在のディレクトリの下の任意の場所にある .pyc ファイルを削除してコンパイルし、次にすべてのワーカーを再起動します。 フラグが何もしない find . -name "*.pyc" -exec rm {} \; supervisorctl restart all のは奇妙に思えますが、私の場合はそうではありません。--autoreload

于 2015-02-02T20:55:08.410 に答える
1

Celery は、直接ロードしたモジュールのみを自動再ロードし、直接モジュールによってロードされた他のモジュールを監視しません。

于 2016-01-05T00:47:19.990 に答える