Asyncore では AMQPConnectionError が発生するのに、BlockingConnection では発生しないのはなぜですか?
「Asyncore は Windows では動作しません」というだけの場合は、その使用を禁止するものをまだ見つけていませんが、それはそれで構いません。(この問題はプラットフォームに依存しません。) 移行を容易にするために、Python 2.7 と Python 3.4 の両方で利用できる非同期ライブラリを使用したいと思います。Asyncore はここで動作するはずです。
Python 2.7.6 および pika 0.9.13 で RabbitMQ 3.2.4 を使用しています。ユーザーと管理者の実行レベルに違いはありませんでした。上記の更新された警告メッセージを除いて、コード内のロガーの有無はエラーに関係ありません。Linux (Ubuntu 14.04) と Windows 7 でも同じエラーが発生するため、プラットフォームの問題ではありません。
BlockingConnection を使用すると pika のパフォーマンスがかなり低下するため、代わりに Asyncore アダプターを試してみたいと思いました。テストベッドのセットアップは非常に簡単に思えます(資格情報を与えてみましたが、それは問題ではなく、与えられていない場合はコールバックがスタブ化されます...どちらの方法でも失敗します。):
チュートリアルごとに BlockingConnection を使用すると、機能しますが、スループットが低くなります。
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
AsyncoreConnection を使用すると、私が試したこれのすべてのバリアントがすぐに失敗します。
connection = pika.AsyncoreConnection(pika.ConnectionParameters(host='localhost'))
エラー:
WARNING:pika.connection:Could not connect, 0 attempts left
Traceback (most recent call last):
File "C:\workspace\send.py", line 8, in <module>
connection = pika.AsyncoreConnection(pika.ConnectionParameters(host='localhost'))
File "C:\Python27\lib\site-packages\pika\adapters\asyncore_connection.py", line 135, in __init__
stop_ioloop_on_close)
File "C:\Python27\lib\site-packages\pika\adapters\base_connection.py", line 62, in __init__
on_close_callback)
File "C:\Python27\lib\site-packages\pika\connection.py", line 590, in __init__
self.connect()
File "C:\Python27\lib\site-packages\pika\connection.py", line 707, in connect
self.callbacks.process(0, self.ON_CONNECTION_ERROR, self, self)
File "C:\Python27\lib\site-packages\pika\callback.py", line 61, in wrapper
return function(*tuple(args), **kwargs)
File "C:\Python27\lib\site-packages\pika\callback.py", line 92, in wrapper
return function(*args, **kwargs)
File "C:\Python27\lib\site-packages\pika\callback.py", line 232, in process
callback(*args, **keywords)
File "C:\Python27\lib\site-packages\pika\connection.py", line 1192, in _on_connection_error
raise exceptions.AMQPConnectionError(self.params.connection_attempts)
pika.exceptions.AMQPConnectionError: 1