我一直在尝试通过使用 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
最佳答案
Pika 不太适合与 gevent 一起使用,因为 pika 基于非阻塞套接字实现了它自己的到 RabbitMQ 的异步连接。这与 gevent 的实现不符。
您可能需要考虑使用 py-amqplib或 kombu
关于python - Pika 和 gevent 的随机超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240749/