Tornado asyncio和Tornado之間的聯(lián)系

2022-03-11 09:52 更新

3.2 版中的新功能。

該模塊將 Tornado 與 Python 3.4 中引入的 ?asyncio模塊集成在一起。 這使得在同一個(gè)事件循環(huán)中組合兩個(gè)庫(kù)成為可能。

5.0 版后已棄用:雖然此模塊中的代碼仍在使用,但現(xiàn)在在 ?asyncio可用時(shí)自動(dòng)啟用,因此應(yīng)用程序不再需要直接引用此模塊。

注意:

Tornado設(shè)計(jì)為使用基于選擇器的事件循環(huán)。在Windows上,基于proactor的事件循環(huán)自Python 3.8以來一直是默認(rèn)的,選擇器事件循環(huán)通過在單獨(dú)的線程上運(yùn)行?select?來模擬。將?asyncio?配置為使用選擇器事件循環(huán)可能會(huì)提高Tornado的性能(但可能會(huì)降低同一過程中其他基于?asyncio?的庫(kù)的性能)。

class tornado.platform.asyncio.AsyncIOMainLoop

?AsyncIOMainLoop創(chuàng)建一個(gè)對(duì)應(yīng)于當(dāng)前 ?asyncio事件循環(huán)的 ?IOLoop?(即 ?asyncio.get_event_loop()? 返回的那個(gè))。

5.0 版后已棄用:現(xiàn)在在適當(dāng)時(shí)自動(dòng)使用; 不再需要直接引用此類。

在 5.0 版更改: 關(guān)閉 ?AsyncIOMainLoop現(xiàn)在會(huì)關(guān)閉底層的 ?asyncio循環(huán)。

class tornado.platform.asyncio.AsyncIOLoop

?AsyncIOLoop是一個(gè)在異步事件循環(huán)上運(yùn)行的 ?IOLoop?。 此類遵循用于創(chuàng)建新 ?IOLoops的常用 Tornado 語義; 這些循環(huán)不一定與 ?asyncio默認(rèn)事件循環(huán)相關(guān)。

每個(gè) ?AsyncIOLoop都會(huì)創(chuàng)建一個(gè)新的 ?asyncio.EventLoop?; 可以使用 ?asyncio_loop屬性訪問此對(duì)象。

在 5.0 版更改: 當(dāng) ?AsyncIOLoop成為當(dāng)前 ?IOLoop時(shí),它也會(huì)設(shè)置當(dāng)前 ?asyncio事件循環(huán)。

5.0 版后已棄用:現(xiàn)在在適當(dāng)時(shí)自動(dòng)使用; 不再需要直接引用此類。

tornado.platform.asyncio.to_tornado_future(asyncio_future: _asyncio.Future) → _asyncio.Future

將 ?asyncio.Future? 轉(zhuǎn)換為 ?tornado.concurrent.Future?。

4.1 版中的新功能。

5.0 版后已棄用:Tornado中 ?Futures已與 ?asyncio.Future? 合并,因此此方法現(xiàn)在是無操作的。

tornado.platform.asyncio.to_asyncio_future(tornado_future: _asyncio.Future) → _asyncio.Future

將 Tornado ?yieldable?對(duì)象轉(zhuǎn)換為 ?asyncio.Future?。

4.1 版中的新功能。

在 4.3 版更改:現(xiàn)在接受任何yieldable對(duì)象,而不僅僅是 ?tornado.concurrent.Future?。

5.0 版后已棄用:Tornado中 ?Futures? 已與 ?asyncio.Future? 合并,因此此方法現(xiàn)在等效于 ?tornado.gen.convert_yielded?。

class tornado.platform.asyncio.AnyThreadEventLoopPolicy

允許在任何線程上創(chuàng)建循環(huán)的事件循環(huán)策略。

默認(rèn)的?asyncio?事件循環(huán)策略僅在主線程中自動(dòng)創(chuàng)建事件循環(huán)。 其他線程必須顯式創(chuàng)建事件循環(huán),否則 ?asyncio.get_event_loop?(?IOLoop.current?)將失敗。 安裝此策略允許在任何線程上自動(dòng)創(chuàng)建事件循環(huán),與 5.0 之前的 Tornado 版本(或 Python 2 上的 5.0)的行為相匹配。

用法:

asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())

class tornado.platform.asyncio.AddThreadSelectorEventLoop(real_loop: asyncio.events.AbstractEventLoop)

包裝事件循環(huán)以添加?add_reader?方法系列的實(shí)現(xiàn)。

這個(gè)類的實(shí)例啟動(dòng)第二個(gè)線程來運(yùn)行選擇器。該線程對(duì)用戶完全隱藏;所有回調(diào)都在包裝好的事件循環(huán)的線程上運(yùn)行。

該類由Tornado自動(dòng)使用;應(yīng)用程序不需要直接引用它。

使用此類包裝任何事件循環(huán)都是安全的,盡管它僅適用于本身未實(shí)現(xiàn)?add_reader?方法系列的事件循環(huán)(即?WindowsProactReventLoop?)

關(guān)閉?AddThreadSelectorEventLoop?也會(huì)關(guān)閉已包裝的事件循環(huán)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)