tornado.platform.asyncioasyncio 和 Tornado 之間的橋樑

asyncio 模組和 Tornado IOLoop 之間建立橋樑。

3.2 版本新增。

此模組將 Tornado 與 Python 3.4 中引入的 asyncio 模組整合。這使得可以在同一個事件迴圈上結合這兩個函式庫。

自 5.0 版本起已棄用:雖然此模組中的程式碼仍在使用,但當 asyncio 可用時,它現在會自動啟用,因此應用程式不再需要直接參考此模組。

注意

Tornado 設計為使用基於選擇器的事件迴圈。在 Windows 上,自 Python 3.8 以來,基於 proactor 的事件迴圈一直是預設的,因此透過在單獨的執行緒上執行 select 來模擬選擇器事件迴圈。將 asyncio 配置為使用選擇器事件迴圈可能會提高 Tornado 的效能(但可能會降低同一進程中其他基於 asyncio 的函式庫的效能)。

class tornado.platform.asyncio.AsyncIOMainLoop(*args: Any, **kwargs: Any)[原始碼]

AsyncIOMainLoop 會建立一個對應於目前 asyncio 事件迴圈的 IOLoop(即 asyncio.get_event_loop() 回傳的事件迴圈)。

自 5.0 版本起已棄用:現在會在適當情況下自動使用;不再需要直接參考此類別。

在 5.0 版本中變更:關閉 AsyncIOMainLoop 現在會關閉底層的 asyncio 迴圈。

class tornado.platform.asyncio.AsyncIOLoop(*args: Any, **kwargs: Any)[原始碼]

AsyncIOLoop 是一個在 asyncio 事件迴圈上執行的 IOLoop。這個類別遵循建立新 IOLoop 的常用 Tornado 語義;這些迴圈不一定與 asyncio 預設事件迴圈相關。

每個 AsyncIOLoop 都會建立一個新的 asyncio.EventLoop;這個物件可以使用 asyncio_loop 屬性存取。

在 6.2 版本中變更:支援明確的 asyncio_loop 引數,用於指定要附加的 asyncio 迴圈,而不是始終使用預設原則建立新的迴圈。

在 5.0 版本中變更:AsyncIOLoop 變成目前的 IOLoop 時,它也會設定目前的 asyncio 事件迴圈。

自 5.0 版本起已棄用:現在會在適當情況下自動使用;不再需要直接參考此類別。

tornado.platform.asyncio.to_tornado_future(asyncio_future: Future) Future[原始碼]

asyncio.Future 轉換為 tornado.concurrent.Future

4.1 版本新增。

自 5.0 版本起已棄用:Tornado Futures 已與 asyncio.Future 合併,因此此方法現在是空操作。

tornado.platform.asyncio.to_asyncio_future(tornado_future: Future) Future[原始碼]

將 Tornado 可 yield 的物件轉換為 asyncio.Future

4.1 版本新增。

在 4.3 版本中變更:現在接受任何可 yield 的物件,而不僅僅是 tornado.concurrent.Future

自 5.0 版本起已棄用:Tornado Futures 已與 asyncio.Future 合併,因此此方法現在等同於 tornado.gen.convert_yielded

class tornado.platform.asyncio.AnyThreadEventLoopPolicy[原始碼]

允許在任何執行緒上建立迴圈的事件迴圈原則。

預設的 asyncio 事件迴圈原則僅會在主執行緒中自動建立事件迴圈。其他執行緒必須明確地建立事件迴圈,否則 asyncio.get_event_loop(以及因此 IOLoop.current)將會失敗。安裝此原則允許在任何執行緒上自動建立事件迴圈,與 5.0 之前的 Tornado 版本(或 Python 2 上的 5.0 版本)的行為一致。

使用方式

asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())

5.0 版本新增。

自 6.2 版本起已棄用:AnyThreadEventLoopPolicy 會影響事件迴圈的隱式建立,這在 Python 3.10 中已棄用,並將在未來版本的 Python 中移除。屆時 AnyThreadEventLoopPolicy 將不再有用。如果您依賴它,請在任何需要事件迴圈的非主執行緒中明確使用 asyncio.new_event_loopasyncio.run

class tornado.platform.asyncio.SelectorThread(real_loop: AbstractEventLoop)[原始碼]

定義 add_reader 方法,以便在背景選取執行緒中呼叫。

此類別的實例會啟動第二個執行緒來執行選取器。此執行緒對使用者完全隱藏;所有回呼都會在包裝的事件迴圈的執行緒上執行。

通常透過 AddThreadSelectorEventLoop 使用,但可以附加到正在執行的 asyncio 迴圈。

class tornado.platform.asyncio.AddThreadSelectorEventLoop(real_loop: AbstractEventLoop)[原始碼]

包裝一個事件迴圈,以新增 add_reader 方法系列的實作。

此類別的實例會啟動第二個執行緒來執行選取器。此執行緒對使用者完全隱藏;所有回呼都會在包裝的事件迴圈的執行緒上執行。

Tornado 會自動使用此類別;應用程式不應需要直接引用它。

用此類別包裝任何事件迴圈都是安全的,儘管它僅對於本身未實作 add_reader 方法系列的事件迴圈(即 WindowsProactorEventLoop)才有意義。

關閉 AddThreadSelectorEventLoop 也會關閉包裝的事件迴圈。