2

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()ても無駄ですか?

単純に試すのではなく質問する理由は、この問題を再現する方法がわからないからです。まれですが有害なので、このエラーが再び発生する前に何らかのロジックを作成する必要があります。

4

2 に答える 2

0

原因は、redis サーバーがシャットダウンしたか、ネットワーク障害が発生したために到達できないことです。これが発生した場合は、redis サーバーのステータスとネットワーク接続を確認して、原因を突き止めてください。

ただし、これが発生することは避けられません。redis が再生成されるまでユーザーに待機するように依頼する場合でも、それを処理する方法を理解する必要があります。

于 2013-11-01T18:35:01.220 に答える