python - Pika 和 gevent 的随机超时错误

标签 python rabbitmq gevent pika

我一直在尝试通过使用 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-amqplibkombu

关于python - Pika 和 gevent 的随机超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240749/

相关文章:

django - 使用退出代码零调试 celery WorkerLostError(Heroku 上的 Django 1.5.5 + celery 3.1.8 + RabbitMQ 3.1.3)

python - aiogevent 事件循环 "fails"跟踪greenlets

python - gevent-websocket python WAMP客户端?

python - 在保存的图像上裁剪 x 轴标签

python - 使用 PerceptronTagger 阅读我自己的 NLTK 词性标记数据集

docker - RabbitMQ、.NET Core 和 Kubernetes(配置)

Python RabbitMQ - 消费者只能看到每秒的消息

python - 我如何使用模拟在 greenlet 中进行测试?

python - 访问 autograd arraybox 值

python - 使用 Pip 1.5 安装外部的、未验证的包