[英]Python tornado tornado.iostream.StreamClosedError
我有一個python龍卷風websocket處理程序,它工作得很好。 但是,偶爾使用websocket連接關閉選項卡時,會引發我無法捕獲的異常。 這種情況僅在Firefox中發生,因此我懷疑這可能是一些內部錯誤。 異常不會中斷代碼的執行,但我仍然希望能夠捕獲所有異常。
例外:
錯誤:asyncio:將來永遠不會檢索到異常:追溯(最近一次調用最近):文件“ C:\\ Users \\ user \\ Anaconda3 \\ lib \\ site-packages \\ tornado \\ websocket.py”,行808,在包裝器產量fut中文件“ C:\\ Users \\ user \\ Anaconda3 \\ lib \\ site-packages \\ tornado \\ gen.py”,行1099,運行值= future.result()tornado.iostream.StreamClosedError:流已關閉
在處理上述異常期間,發生了另一個異常:
回溯(最近一次通話):文件“ C:\\ Users \\ user \\ Anaconda3 \\ lib \\ site-packages \\ tornado \\ gen.py”,行1107,運行時產生= self.gen.throw(* exc_info)文件“ C:\\ Users \\ user \\ Anaconda3 \\ lib \\ site-packages \\ tornado \\ websocket.py“,行810,在包裝器中引發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)
我在這里找到了答案: 在asyncio.ensure_future中捕獲錯誤 。
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'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.