redis-py“ConnectionError:Socket在远程端关闭”

时间:2013-11-01 17:18:40

标签: python redis-py

使用redis-py的PubSub类我有时会遇到以下异常:

Exception in thread listener_2013-10-24 12:50:31.687000:
Traceback (most recent call last):
  File "c:\Python27\Lib\threading.py", line 551, in __bootstrap_inner
    self.run()
  File "c:\Python27\Lib\threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\Users\Administrator\Documents\my_proj\my_module.py", line 69, in _listen
    for message in _pubsub.listen():
  File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\redis\client.py", line 1555, in listen
    r = self.parse_response()
  File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\redis\client.py", line 1499, in parse_response
    response = self.connection.read_response()
  File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\redis\connection.py", line 306, in read_response
    response = self._parser.read_response()
  File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\redis\connection.py", line 106, in read_response
    raise ConnectionError("Socket closed on remote end")
ConnectionError: Socket closed on remote end

会导致此类事件的原因是什么? 如果我抓住这个例外,那么合理的处理逻辑是什么?重试listen()是徒劳的吗?

询问而不是简单尝试的原因是我不知道如何重现这个问题。这很罕见,但它有害,所以我必须在此错误再次出现之前创建一些逻辑。

2 个答案:

答案 0 :(得分:2)

可能的来源:

  1. 连接另一端的代码中的错误导致了 连接被删除
  2. 远程计算机已重启或崩溃
  3. 有人正在使用他们的网络界面 ipconfig或类似的
  4. 瞬态网络错误持续了足够长的连接时间 丢弃
  5. 最好不要担心为什么会发生这种情况(有可能是我没有列出的原因),而是专注于如何处理它。

    您可能最好在代码中找到一个位置来添加try / except,并处理收到的部分数据,或忽略收到的部分数据。

答案 1 :(得分:0)

原因是您的redis服务器无法访问,无论是因为它关闭还是网络故障。发生这种情况时,请检查redis服务器的状态和网络连接,以找出导致此问题的原因。

然而,这种情况不可避免地会发生。您需要弄清楚如何处理它,即使要求用户在重新生成redis时等待。