短いバージョン: リモート プロシージャ コールの状況で Pika をブロックしないようにするにはどうすればよいですか?
長いバージョン:
Pika の例はどれも、私のユース ケースを示していません。
AMQP(RabbitMQ、Pika)を介して他のプロセス/マシンと通信するTornadoサーバーがあります。これらの他のプロセスはあまり明確に定義されていませんが、ほとんどの場合、データを返します ( RabbitMQ の Web サイトの RPC の例を参照してください)。場合によっては、プロセスが大量の情報を処理するのに非常に長い時間がかかることがありますが、小さなリクエストがプロセスによって取得されるのを完全にブロックするべきではありません。または、リモート サーバーが Web 要求を送信したためにブロックされている可能性があります。Web サーバーのように考えてください。ただし、HTTP の代わりに AMQP を使用します。
Pika のドキュメントでは、スレッドセーフではないと主張しているため、接続を複数のスレッド (またはプロセス) に渡すことはできません。私がやりたいことは、Tornado でできるように、新しいプロセスを開始し、ソケット イベント (そのプログラムへのパイプ用) を Pika IOLoop に追加することです。Pika IOLoop は Tornado IOLoop とは大きく異なり、複数のハンドラーの追加をサポートしていないようです。1 つのソケットで 1 つの「ポーラー」を使用して動作しているようです。
IOLoop のみを使用するため、このパッケージに Tornado パッケージを要求することは避けたいと思います。それは問題外ではありませんが、他のオプションが何であるか、または複数の Pika IOLoops/Poller を何らかの方法で接続することによって問題の解決策があるかどうかを確認したいです。RabbitMQ のドキュメントには、多くの場合、ワーカーを追加することで「スケールアップ」できると書かれています。着信するすべてのリクエストに対して接続を作成することは避けたいと思います (リクエストが高速に着信する場合)。