Python 龙卷风 tornado.iostream.StreamClosedError
Python tornado tornado.iostream.StreamClosedError
我有一个 python tornado websocket 处理程序,它工作得很好。但是,偶尔当使用 websocket 连接关闭选项卡时,它会抛出我无法捕获的异常。这只发生在 Firefox 上,所以我怀疑这可能是一些内部错误。异常不会中断代码的执行,但我仍然希望能够捕获所有异常。
例外情况:
ERROR:asyncio:Future exception was never retrieved
future:
Traceback (most recent call last):
File "C:\Users\user\Anaconda3\lib\site-packages\tornado\websocket.py", line 808, in wrapper
yield fut
File "C:\Users\user\Anaconda3\lib\site-packages\tornado\gen.py", line 1099, in run
value = future.result()
tornado.iostream.StreamClosedError: Stream is closed
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\user\Anaconda3\lib\site-packages\tornado\gen.py", line 1107, in run
yielded = self.gen.throw(*exc_info)
File "C:\Users\user\Anaconda3\lib\site-packages\tornado\websocket.py", line 810, in wrapper
raise WebSocketClosedError()
tornado.websocket.WebSocketClosedError
这里是 on_message 函数的代码:
async def on_message(self, message):
print(message)
while True:
try:
#print('ws_connections: ', self.ws_connection, self.ws_connection.stream.socket)
_fut = self.write_message(self.users[self].request_data())
except tornado.iostream.StreamClosedError as e:
print('StreamClosedError:', e)
break
except tornado.websocket.WebSocketClosedError as e:
print('WebSocketClosedError:', e)
break
except KeyError as e:
print('KeyError:', e)
break
await gen.sleep(1)
我在这里找到了答案:。
async def on_message(self, message):
print(message)
while True:
try:
self.ping(b'ping')
fut = self.write_message(self.users[self].request_data())
await fut
except tornado.iostream.StreamClosedError as e:
print('StreamClosedError:', e)
break
except tornado.websocket.WebSocketClosedError as e:
print('WebSocketClosedError:', self)
break
except KeyError as e:
print('KeyError:', e)
break
await gen.sleep(5)
我只需要在我从 self.write_message 回来后添加 'await fut'。
我有一个 python tornado websocket 处理程序,它工作得很好。但是,偶尔当使用 websocket 连接关闭选项卡时,它会抛出我无法捕获的异常。这只发生在 Firefox 上,所以我怀疑这可能是一些内部错误。异常不会中断代码的执行,但我仍然希望能够捕获所有异常。
例外情况:
ERROR:asyncio:Future exception was never retrieved future: Traceback (most recent call last): File "C:\Users\user\Anaconda3\lib\site-packages\tornado\websocket.py", line 808, in wrapper yield fut File "C:\Users\user\Anaconda3\lib\site-packages\tornado\gen.py", line 1099, in run value = future.result() tornado.iostream.StreamClosedError: Stream is closed
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "C:\Users\user\Anaconda3\lib\site-packages\tornado\gen.py", line 1107, in run yielded = self.gen.throw(*exc_info) File "C:\Users\user\Anaconda3\lib\site-packages\tornado\websocket.py", line 810, in wrapper raise WebSocketClosedError() tornado.websocket.WebSocketClosedError
这里是 on_message 函数的代码:
async def on_message(self, message):
print(message)
while True:
try:
#print('ws_connections: ', self.ws_connection, self.ws_connection.stream.socket)
_fut = self.write_message(self.users[self].request_data())
except tornado.iostream.StreamClosedError as e:
print('StreamClosedError:', e)
break
except tornado.websocket.WebSocketClosedError as e:
print('WebSocketClosedError:', e)
break
except KeyError as e:
print('KeyError:', e)
break
await gen.sleep(1)
我在这里找到了答案:
async def on_message(self, message):
print(message)
while True:
try:
self.ping(b'ping')
fut = self.write_message(self.users[self].request_data())
await fut
except tornado.iostream.StreamClosedError as e:
print('StreamClosedError:', e)
break
except tornado.websocket.WebSocketClosedError as e:
print('WebSocketClosedError:', self)
break
except KeyError as e:
print('KeyError:', e)
break
await gen.sleep(5)
我只需要在我从 self.write_message 回来后添加 'await fut'。