Tornado asyncio和Tornado之间的联系
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
也会关闭已包装的事件循环。