以下异步生成器代码直接从PEP525中删除:
async def gen():
await asyncio.sleep(0.1)
v = yield 42
print(v)
await asyncio.sleep(0.2)
然而,当我打电话(用python3.6)时:
print(asyncio.iscoroutinefunction(gen), asyncio.iscoroutine(gen))
我得到:
False, False
为什么异步生成器不能识别为协同函数?
还有其他方法可以将其识别为协同函数吗?
发布于 2019-12-15 11:18:44
您希望使用inspect.isasyncgenfunction()
(以及调用gen()
的结果的inspect.isasyncgen()
):
>>> import inspect
>>> print(inspect.isasyncgenfunction(gen), inspect.isasyncgen(gen()))
True True
异步函数和异步生成器函数之间不存在类型层次关系。
另外,asyncio.iscoroutine*()
函数存在的唯一原因是支持legacy generator-based @asyncio.coroutine
decorator,它不能用于创建异步生成器。如果您不需要支持可能仍然使用这些代码库(比Python3.5更早)的旧代码库,那么我只需要使用inspect.is*()
函数。
https://stackoverflow.com/questions/59343239
复制相似问题