tornado.platform.asyncioasyncio 和 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 中的更改: AsyncIOLoop 成为当前 IOLoop 时,它也会设置当前的 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_loopasyncio.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 也会关闭包装的事件循环。