10

Celerybeat インスタンスで実行するタスクがあります。そのタスクが実行されると、post/pre_save シグナルを発するはずのモデル オブジェクトが変更されることがありますが、そうではありません。信号が発生していません。これは、セロリが別のユニバースの別のスレッドの別のサーバーで実行している間に Django の信号が同期しているためだと思います。セロリで実行されている間にこれらの信号を発火させる簡単な方法はありますか?

4

1 に答える 1

20

Django シグナルはローカルです。つまり、シグナル ハンドラーもワーカーに登録する必要があります。

シグナル ハンドラがたとえば で接続されている場合はmodels.py、それをインポートしtasks.pyてワーカーでも接続されていることを確認する必要があります。

CELERY_IMPORTSまたは、次の設定を使用して、ワーカーがインポートする必要がある追加のモジュールを指定できます。

CELERY_IMPORTS = ("myapp.handlers", )

または-Iセロリドへの引数。

$ python manage.py celeryd -I myapp.handlers
于 2010-10-14T08:00:55.310 に答える