在tornado的ioloop上使用asyncio方法(比如create_future)

Use asyncio methods on tornado's ioloop (such as create_future)

我知道自从 5.0 tornado 的 ioloop 由 asyncio 处理,事实上我使用 tornado.ioloop.IOloop.current() 的循环默认是 asyncio 循环。我的问题是如何以正确的方式访问 asyncio 循环本身。例如,我想在 asyncio 循环上使用 loop.create_future() 方法,但是 tornado 包装了循环并且它上面没有这个方法。

目前我所做的是当我需要 asyncio 方法时我只调用 asyncio.get_event_loop()(因为文档指出这两个循环确实是相同的)。我不确定这是执行此操作的正确方法,因为现在我对具有不同接口的同一个 ioloop 有不同的引用,并且我使用了所需的那个。这有点混乱和混乱。

有没有更好的方法?我可以告诉龙卷风在不包装的情况下给我异步循环吗?或者我可以使用龙卷风创建的 IOloop 以某种方式访问​​这些方法吗?

编辑:

https://www.tornadoweb.org/en/stable/ioloop.html#module-tornado.ioloop 此处声明如下:

Applications can use either the IOLoop interface or the underlying asyncio event loop directly

我对后者很感兴趣,但是我找不到关于如何直接访问它的说明。

终于找到方法了。所以 tornado 创建的 ioloop 将是 AsyncIOMainLoop 类型。我查看了源代码,它的基础 class 是 BaseAsyncIOLoop 因为 class 有一个 属性 叫做 asyncio_loop

这样我终于可以使用异步循环了。 (ioloop.IOLoop.current().asyncio_loop)

asyncio.get_event_loop()是推荐的方法;无需使用(未记录的)asyncio_loop 属性。这就是所有非 tornado 特定的异步代码获取事件循环的方式。