2012-06-28 38 views
5

Tôi đã cố gắng sử dụng RabbitMQ từ bên trong chương trình gevent của mình bằng cách sử dụng thư viện Pika (khỉ vá bởi gevent), gevent thích ngẫu nhiên ném một lỗi hết thời gian chờ.Lỗi thời gian chờ ngẫu nhiên với Pika và gevent

Tôi nên làm gì? Có thư viện nào khác mà tôi có thể sử dụng không?

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

Tôi đang hướng lên cùng một vấn đề khi tôi sử dụng 2 hoặc nhiều hơn các nhà sản xuất trong một thread xanh chỉ . –

Trả lời

5

Pika không lý tưởng để sử dụng với gevent vì pika thực hiện kết nối không đồng bộ riêng của mình để RabbitMQ dựa trên socket non-blocking. Điều này chỉ không phù hợp với việc thực hiện của gevent giống nhau.

Bạn có thể muốn xem xét sử dụng py-amqplib hoặc kombu

0

Tôi cũng đang gặp vấn đề với việc sử dụng thời gian chờ Pika trong một ứng dụng Django/Gunicorn. Tôi chơi với nâng cao connection_attempts hoặc tăng thời gian chờ nhưng RabbitMQ luôn đóng kết nối bằng một lỗi bắt tay. Thứ hai dường như chỉ ra rằng Pika không bao giờ truyền bất kỳ dữ liệu nào trên socket.

Nguyên nhân gây ra thời gian chờ có thể là libevent bug - ít nhất trong môi trường của tôi, tập lệnh đính kèm với lỗi này có thể tái tạo sự cố.

Bạn có thể cố gắng nâng cấp lên gevent> = 1.0 (tại thời điểm viết bài không được công bố chưa):

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

Đã cố sử dụng '' 'gevent-1.0.1''' - không may mắn. –

Các vấn đề liên quan