3

単一の Postgres データベースを共有する Django インスタンスを備えた多数のマシンがあります。

簡単にするために、できればDjangoブローカーとPostgresデータベースを使用して、Celeryを実行したいと考えています。大量のタスクを実行する必要はないので、別のブローカーを使用する必要はありません。

ローカル ファイル ストレージで動作するセロリ タスクを実行したいと考えています。これは、イベントをトリガーしたのと同じマシン上にあるタスクのみをセロリ ワーカーに実行させたいということです。

現在の設定で可能ですか?そうでない場合は、どのようにしますか?各マシンのローカル Redis インスタンス?

4

1 に答える 1

2

私はこれを機能させる方法を考え出しました。派手なルーティングやブローカーは必要ありません。

celerydホストにちなんで名付けられた特別なキューで各インスタンスを実行します。これは、次のように自動的に実行できます。

./manage.py celeryd -Q celery,`hostname`

次に、ホスト名settings.pyを格納する にホスト名を設定します。

import socket
CELERY_HOSTNAME = socket.gethostname()

各 Django インスタンスで、これは異なる値になります。

次に、タスクを非同期で呼び出すときに、このキューを指定できます。

my_task.apply_async(args=[one, two], queue=settings.CELERY_HOSTNAME)
于 2013-01-31T19:13:17.040 に答える