tornado.platform.asyncio
— asyncio
和 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 版本起已棄用:現在會在適當情況下自動使用;不再需要直接參考此類別。
- 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_loop
或asyncio.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
也會關閉包裝的事件迴圈。