セロリワーカーを実行するサーバーとRedisキューがあります。タスクはそのサーバーで定義されます。
これらのタスクをリモートマシンから呼び出せるようにする必要があります。
私はそれがsend_task
しかし、まだ方法がわかりませんか?どうすればsend_task
キューはどこにありますか?接続パラメーター(または必要なもの)はどこに渡しますか?私は何時間も探していましたが、見つけることができるのはこれだけです:
from celery.execute import send_task
send_task('tasks.add')
まあ、それは私が自分の呼び出しマシンにもcelery
が必要であることを意味します。しかし、他に何を設定する必要がありますか?
これは1つの方法である可能性があります。Celeryオブジェクトを作成し、そのオブジェクトからsend_taskを使用すると、オブジェクトはブローカーを見つけるための構成を持つことができます。
from celery import Celery
celery = Celery()
celery.config_from_object('celeryconfig')
celery.send_task('tasks.add', (2,2))
celeryconfigはセロリ構成を含むファイルですが、セロリオブジェクトに構成を設定する方法は他にもあります。
リモートマシンで、broker_urlがタスクを実行するマシンを指すようにceleryを起動します。次に、タスクを送信するだけです(送信する特定のキューがある場合は、適切なルーティングキーを追加します)。
ルーティングルールを定義する方法はいくつかありますが、最も一般的なものはカスタムルーターオブジェクトです。すべての場合において、呼び出し元はrouting_key
パラメータsend_task
、delay
またはapply_async
とルーターは、タスクを送信するキューを決定します。