6

Pika ライブラリ (gevent によってパッチが適用されたサル) を使用して、gevent プログラム内から RabbitMQ を利用しようとしましたが、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
4

2 に答える 2

5

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

py-amqplibまたはkombuの使用を検討することをお勧めします

于 2012-07-06T05:01:36.993 に答える
0

Django/Gunicorn アプリケーションで Pika を使用すると、タイムアウトの問題も発生します。タイムアウトを増やしたり増やしたりして遊んconnection_attemptsだが、RabbitMQ は常にハンドシェイク エラーで接続を閉じていた。後者は、Pika がソケット上でデータをまったく送信しなかったことを示しているようです。

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

gevent>=1.0 へのアップグレードを試すことができます (執筆時点ではまだリリースされていません):

wget http://gevent.googlecode.com/files/gevent-1.0b4.tar.gz
pip install gevent-1.0b4.tar.gz
于 2012-10-01T23:18:40.360 に答える