2012-06-28 5 views
5

Я пытаюсь использовать RabbitMQ из моей программы gevent, используя библиотеку Pika (обезьяна, исправленная gevent), gevent любит случайным образом бросать ошибку тайм-аута.Случайная ошибка таймаута с 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

Пики не идеально подходят для использования с GEvent, потому что пищуха реализует свое собственное асинхронное подключение к RabbitMQ, основанному на неблокирующих сокетах. Это просто не подходит для реализации Gevent.

Вы можете рассмотреть возможность использования py-amqplib или kombu

0

Я также возникли проблемы с тайм-аута с помощью Pika в приложении Django/Gunicorn. Я играл с повышением connection_attempts или увеличением таймаута, но RabbitMQ всегда закрывал соединение с ошибкой рукопожатия. Последнее, по-видимому, указывает на то, что Pika никогда не передавала никаких данных о сокете.

Причиной времени ожидания может быть libevent bug - по крайней мере, в моей среде скрипт, прикрепленный к ошибке, способен воспроизвести проблему.

Вы могли бы попробовать модернизировать к GEvent> = 1.0 (на момент написания не выпустили еще):

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

Пытался использовать '' 'gevent-1.0.1''' - не повезло. –

Смежные вопросы