2012-06-28 10 views
5

私はgeikaプログラム内でPikaライブラリ(geventでパッチを当てた猿)を使用してRabbitMQを使用しようとしていましたが、ランダムにタイムアウトエラーが発生しました。Pikaとgeventでランダムタイムアウトエラーが発生しました

どうすればよいですか?私が使うことができる別の図書館はありますか?

WARNING:root:Document not found, retrying primary. 
Traceback (most recent call last): 
    ... 
    File "/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 32, in __init__ 
    BaseConnection.__init__(self, parameters, None, reconnection_strategy) 
    File "/usr/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 50, in __init__ 
    reconnection_strategy) 
    File "/usr/lib/python2.7/dist-packages/pika/connection.py", line 170, in __init__ 
    self._connect() 
    File "/usr/lib/python2.7/dist-packages/pika/connection.py", line 228, in _connect 
    self.parameters.port or spec.PORT) 
    File "/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 44, in _adapter_connect 
    self._handle_read() 
    File "/usr/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 151, in _handle_read 
    data = self.socket.recv(self._suggested_buffer_size) 
    File "/usr/lib/python2.7/dist-packages/gevent/socket.py", line 427, in recv 
    wait_read(sock.fileno(), timeout=self.timeout, event=self._read_event) 
    File "/usr/lib/python2.7/dist-packages/gevent/socket.py", line 169, in wait_read 
    switch_result = get_hub().switch() 
    File "/usr/lib/python2.7/dist-packages/gevent/hub.py", line 164, in switch 
    return greenlet.switch(self) 
timeout: timed out 
+0

私は唯一の緑のスレッドで2つの以上のプロデューサを使用する場合、私は同じ問題を上向きにしています。 –

答えて

5

ピカは理想的ナキウサギは、ノンブロッキングソケットに基づいてのRabbitMQへの独自の非同期接続を実装しているためgeventでの使用に適していません。これはgeventの同じ実装とうまく適合しません。

あなたは、私はまた、ジャンゴ/ Gunicornアプリケーションでピカを使用して、タイムアウトの問題を抱えているpy-amqplibまたはkombu

0

を使用して検討する必要があります。私はconnection_attemptsを上げるかタイムアウトを増やして演奏しましたが、RabbitMQは常にハンドシェイクエラーで接続を閉じました。後者は、Pikaがソケット上のデータを一度も送信しなかったことを示しているようです。

タイムアウトの原因はこのlibevent bugである可能性があります - 少なくとも私の環境では、バグに添付されたスクリプトが問題を再現できます。

あなたは(まだリリースされていない執筆時点で)> = 1.0をgeventにアップグレードしようとすることができ:

wget http://gevent.googlecode.com/files/gevent-1.0b4.tar.gz 
pip install gevent-1.0b4.tar.gz 
+0

「 '' 'gevent-1.0.1''' - no luckを使ってみました。 –