PythonでRabbitMQ - Consumerの実装
Pika*1を使って非同期処理の実装をするのが良さそう。
ドキュメントに実装例が充実しています。
Usage Examples — pika 0.9.13 documentation
非同期処理の実装例もあるのでそれを利用します。
Asynchronous consumer example — pika 0.9.13 documentation
RabbitMQは1台だけで運用するような場面は少なく、クラスタを組んで利用することが多いと思われます。 どのノードからデキューしても問題ないので、argparseのnargsオプションを利用してコマンドラインから複数のホスト名を受け取り、 ランダムに繋ぐ形にしています。printをしているhandle_deliveryメソッドで何かしら重たい処理を実装します。
こんなスクリプトを以下の様な設定ファイルでSupervisor*2を利用して動かせば、簡単にConsumerの実装が出来てしまいます。
マルチコアのCPUの場合は1プロセスだけではCPUを使い切ることが出来ないので、 numprocオプションでCPU数(場合によってはCPUを使い切る数)のプロセスを上げておけば良いでしょう。 Consumerの実装で複雑なマルチプロセス処理を書かなくても、このような形で目一杯リソースを利用するような処理を実装することが出来ます。
Enjoy!