检测协同程序是否需要异步循环

2024-10-02 10:20:30 发布

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

我正在编写代码,使用Twisted等待用户提供的协同程序。在一个简单的例子中,我只需要使用^{}将一个协程转换为一个延迟的。但是如果协同程序使用例如asyncio.sleep(),我需要使用asyncio.ensure_future将其包装成一个异步任务,该任务将在异步循环中运行,这需要AsyncioSelectorReactor。我想支持第一种情况,即使没有使用AsyncioSelectorReactor,所以我不想在所有协程上调用asyncio.ensure_future。我能想到的唯一方法就是检测协同程序是否需要异步,这有可能吗?或者,也许,有一个更简单的方法来做到这一点?在


Tags: 方法代码用户asynciotwisted情况futuresleep
1条回答
网友
1楼 · 发布于 2024-10-02 10:20:30

检查协同程序中是否引用了asyncio可能会有帮助。考虑以下示例:

import asyncio

async def test1():
    pass

async def test2():
    await asyncio.sleep(10)

del asyncio
async def test3():
    import asyncio

使用inspect.getclosurevars,可以检查是否存在异步:

^{pr2}$

当然,当用户的协程从asyncio导入不使用循环的内容(例如异常或常量)时,或者当用户代码不使用导入的协程时,这将给出误报。在

相关问题 更多 >

    热门问题