2012-06-28 9 views
5

He intentado utilizar RabbitMQ desde dentro de mi programa gevent utilizando la biblioteca Pika (mono parcheado por gevent), a gevent le gusta lanzar aleatoriamente un error de tiempo de espera.Error de tiempo de espera aleatorio con Pika y gevent

¿Qué debo hacer? ¿Hay otra biblioteca que pueda usar?

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

que estoy enfrentando el mismo problema cuando utilizo 2 o más productores en un hilo verde solamente . –

Respuesta

5

Pika no es ideal para usar con GEvent porque pika implementa su propia conexión asíncrona a RabbitMQ basado en sockets no bloqueantes. Esto simplemente no encaja bien con la implementación de gevent de lo mismo.

es posible que desee considerar el uso de py-amqplib o kombu

0

También estoy teniendo problemas de tiempo de espera con el uso de Pika en una aplicación Django/Gunicorn. Jugué subiendo connection_attempts o aumentando el tiempo de espera pero RabbitMQ siempre cerró la conexión con un error de handshake. Esto último parece indicar que Pika nunca transmitió ningún dato en el zócalo.

La causa de los tiempos de espera podría ser libevent bug - al menos en mi entorno el script adjunto al error puede reproducir el problema.

usted podría intentar la actualización a GEvent> = 1.0 (en el momento de la escritura no publicado aún):

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

Intenté usar '' 'gevent-1.0.1''' - sin suerte. –