2016-08-10 9 views
2

私はCeleryのドキュメントから学んだことがあります。デフォルトでは、Celeryはタスクを実行する前にメッセージを確認します。Celeryがタスクメッセージを取得して実行する戦略は何ですか?

セロリのワーカーは、複数のタスクメッセージを取得し、それらを一緒に確認するか、1つだけ確認して1つを実行し、次に1つを取り出してから、それを実行して実行しますか?

後者の場合、グリーンレットモードの作業者は、タスクを実行してネットワーク応答を待っているときに別のタスクメッセージを取得して実行するか、最初のタスクが完了するのを待つだけです?

答えて

0

はここに答えhttps://github.com/celery/celery/issues/3394

メッセージ(タスク 消費者)を受信するための責任を1件のgreenletスレッドがあります、とgreenletワーカースレッドのプールがあります。

タスクコンシューマは1つのタスクメッセージを受信して​​プールに送信し、 は別のタスクメッセージを受信して​​プールに送信します。

プールワーカースレッドがタスクメッセージを受信し、それがタスク 消費者に戻ってメッセージを送信することにより、それに取り組んで開始し ことを認め、タスクの消費者は、ブローカーに basic.ackを送信することにより、タスクを認めています。

  • をプールする[コンシューマ]タスクメッセージ
  • を受信[コンシューマ]委任タスクメッセージ[PoolWorker-1]はタスクメッセージ
  • [PoolWorker-1]バック消費者にACK送信受信(I
  • [コンシューマ]は、プールワーカーからackを受け取り、メッセージを確認するようにブローカに指示します。

これらの2つのスレッドは、並行して発生します。タスクを受け取るブローカ 接続のみがメッセージを確認することができ、 ブローカ接続はスレッド間で共有できないため、 コンシューマスレッドのみがブローカソケットの読み込み/書き込みを許可されます。

関連する問題