tornado.platform.asyncio
— asyncio
和 Tornado 之间的桥梁¶
在 asyncio
模块和 Tornado IOLoop 之间的桥梁。
版本 3.2 中的新增功能。
此模块将 Tornado 与 Python 3.4 中引入的 asyncio
模块集成在一起。这使得可以在同一个事件循环上组合这两个库。
自版本 5.0 起已弃用: 虽然此模块中的代码仍在使用,但现在当 asyncio
可用时会自动启用,因此应用程序不再需要直接引用此模块。
注意
Tornado 旨在使用基于选择器的事件循环。在 Windows 上,自从 Python 3.8 以来,基于前驱的事件循环一直是默认事件循环,通过在单独的线程中运行 select
来模拟选择器事件循环。将 asyncio
配置为使用选择器事件循环可能会提高 Tornado 的性能(但可能会降低同一进程中其他基于 asyncio
的库的性能)。
- class tornado.platform.asyncio.AsyncIOMainLoop(*args: Any, **kwargs: Any)[source]¶
AsyncIOMainLoop
创建一个与当前asyncio
事件循环(即由asyncio.get_event_loop()
返回的事件循环)相对应的IOLoop
。自版本 5.0 起已弃用: 现在在适当的时候自动使用;不再需要直接引用此类。
版本 5.0 中的更改: 关闭
AsyncIOMainLoop
现在会关闭底层的 asyncio 循环。
- class tornado.platform.asyncio.AsyncIOLoop(*args: Any, **kwargs: Any)[source]¶
AsyncIOLoop
是一个在asyncio
事件循环上运行的IOLoop
。此类遵循创建新IOLoops
的通常 Tornado 语义;这些循环不一定与asyncio
默认事件循环相关。每个
AsyncIOLoop
都创建一个新的asyncio.EventLoop
;可以使用asyncio_loop
属性访问此对象。版本 6.2 中的更改: 支持显式
asyncio_loop
参数来指定要附加到的 asyncio 循环,而不是始终使用默认策略创建一个新的循环。自版本 5.0 起已弃用: 现在在适当的时候自动使用;不再需要直接引用此类。
- tornado.platform.asyncio.to_tornado_future(asyncio_future: Future) Future [source]¶
将
asyncio.Future
转换为tornado.concurrent.Future
。版本 4.1 中的新增功能。
自版本 5.0 起已弃用: Tornado
Futures
已与asyncio.Future
合并,因此此方法现在是一个无操作方法。
- tornado.platform.asyncio.to_asyncio_future(tornado_future: Future) Future [source]¶
将 Tornado 可生成对象转换为
asyncio.Future
。版本 4.1 中的新增功能。
版本 4.3 中的更改: 现在接受任何可生成对象,而不仅仅是
tornado.concurrent.Future
。自版本 5.0 起已弃用: Tornado
Futures
已与asyncio.Future
合并,因此此方法现在等效于tornado.gen.convert_yielded
。
- class tornado.platform.asyncio.AnyThreadEventLoopPolicy[source]¶
允许在任何线程上创建循环的事件循环策略。
默认的
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)[source]¶
定义要在后台选择线程中调用的
add_reader
方法。此类的实例启动一个新的线程来运行选择器。这个线程对用户完全隐藏;所有回调都在包装的事件循环线程中执行。
通常通过
AddThreadSelectorEventLoop
使用,但可以附加到正在运行的 asyncio 循环。
- class tornado.platform.asyncio.AddThreadSelectorEventLoop(real_loop: AbstractEventLoop)[source]¶
包装一个事件循环,以添加
add_reader
方法族 的实现。此类的实例启动一个新的线程来运行选择器。这个线程对用户完全隐藏;所有回调都在包装的事件循环线程中执行。
此类由 Tornado 自动使用;应用程序无需直接引用它。
用此类包装任何事件循环都是安全的,尽管它只对本身不实现
add_reader
方法族 的事件循环有意义(例如WindowsProactorEventLoop
)。关闭
AddThreadSelectorEventLoop
也会关闭包装的事件循环。