Tornado asyncio和Tornado之间的联系

2022-03-11 09:52 更新

3.2 版中的新功能。

该模块将 Tornado 与 Python 3.4 中引入的 ​asyncio模块集成在一起。 这使得在同一个事件循环中组合两个库成为可能。

5.0 版后已弃用:虽然此模块中的代码仍在使用,但现在在 ​asyncio可用时自动启用,因此应用程序不再需要直接引用此模块。

注意:

Tornado设计为使用基于选择器的事件循环。在Windows上,基于proactor的事件循环自Python 3.8以来一直是默认的,选择器事件循环通过在单独的线程上运行​select​来模拟。将​asyncio​配置为使用选择器事件循环可能会提高Tornado的性能(但可能会降低同一过程中其他基于​asyncio​的库的性能)。

class tornado.platform.asyncio.AsyncIOMainLoop

AsyncIOMainLoop创建一个对应于当前 ​asyncio事件循环的 ​IOLoop​(即 ​asyncio.get_event_loop()​ 返回的那个)。

5.0 版后已弃用:现在在适当时自动使用; 不再需要直接引用此类。

在 5.0 版更改: 关闭 ​AsyncIOMainLoop现在会关闭底层的 ​asyncio循环。

class tornado.platform.asyncio.AsyncIOLoop

AsyncIOLoop是一个在异步事件循环上运行的 ​IOLoop​。 此类遵循用于创建新 ​IOLoops的常用 Tornado 语义; 这些循环不一定与 ​asyncio默认事件循环相关。

每个 ​AsyncIOLoop都会创建一个新的 ​asyncio.EventLoop​; 可以使用 ​asyncio_loop属性访问此对象。

在 5.0 版更改: 当 ​AsyncIOLoop成为当前 ​IOLoop时,它也会设置当前 ​asyncio事件循环。

5.0 版后已弃用:现在在适当时自动使用; 不再需要直接引用此类。

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

将 ​asyncio.Future​ 转换为 ​tornado.concurrent.Future​。

4.1 版中的新功能。

5.0 版后已弃用:Tornado中 ​Futures已与 ​asyncio.Future​ 合并,因此此方法现在是无操作的。

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

将 Tornado ​yieldable​对象转换为 ​asyncio.Future​。

4.1 版中的新功能。

在 4.3 版更改:现在接受任何yieldable对象,而不仅仅是 ​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())

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

包装事件循环以添加​add_reader​方法系列的实现。

这个类的实例启动第二个线程来运行选择器。该线程对用户完全隐藏;所有回调都在包装好的事件循环的线程上运行。

该类由Tornado自动使用;应用程序不需要直接引用它。

使用此类包装任何事件循环都是安全的,尽管它仅适用于本身未实现​add_reader​方法系列的事件循环(即​WindowsProactReventLoop​)

关闭​AddThreadSelectorEventLoop​也会关闭已包装的事件循环。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号