在tornado的ioloop上使用asyncio方法(例如create\u future)

2024-04-20 00:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道,由于5.0tornado的ioloop是由asyncio处理的,实际上我使用tornado.ioloop.IOloop.current()得到的循环在默认情况下是一个asyncio循环。我的问题是如何以正确的方式访问asyncio循环本身。例如,我想在asyncio循环上使用loop.create_future()方法,但是tornado包装了循环,它没有这个方法。你知道吗

目前,当我需要asyncio方法时,我只调用asyncio.get_event_loop()(因为文档说明这两个循环确实是相同的)。我不确定这样做是否正确,因为现在我对同一ioloop有不同的引用和不同的接口,我使用的是所需的引用。这有点混乱。你知道吗

有更好的办法吗?我能告诉tornado在不包装的情况下给我asyncio循环吗?或者我可以使用tornado创建的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

我对后者感兴趣,但我找不到如何直接访问它的说明。你知道吗


Tags: the方法文档loopeventasynciogetcreate
2条回答

我终于找到了办法。所以龙卷风造成的ioloop将是AsyncIOMainLoop类型。我看了源代码,它的基类是BaseAsyncIOLoop在这个类中有一个名为asyncio_loop的属性

有了它,我终于可以使用asyncio循环了。(ioloop.IOLoop.current().asyncio_loop

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

相关问题 更多 >