簡體   English   中英

Python龍卷風tornado.iostream.StreamClosedError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM