Per*_*nce 7 python python-3.x python-asyncio python-3.6
以下异步生成器代码直接取自 PEP525:
async def gen():
await asyncio.sleep(0.1)
v = yield 42
print(v)
await asyncio.sleep(0.2)
Run Code Online (Sandbox Code Playgroud)
但是,当我调用(使用 python3.6)时:
print(asyncio.iscoroutinefunction(gen), asyncio.iscoroutine(gen))
Run Code Online (Sandbox Code Playgroud)
我得到:
False, False
Run Code Online (Sandbox Code Playgroud)
为什么异步生成器无法识别为协程函数?
还有其他方法可以将其识别为协程函数吗?
您想要使用inspect.isasyncgenfunction()(以及inspect.isasyncgen()调用的结果gen()):
>>> import inspect
>>> print(inspect.isasyncgenfunction(gen), inspect.isasyncgen(gen()))
True True
Run Code Online (Sandbox Code Playgroud)
异步函数和异步生成器函数之间没有类型层次结构关系。
asyncio.iscoroutine*()此外,这些函数存在的唯一原因是支持遗留的基于生成器的@asyncio.coroutine装饰器,它不能用于创建异步生成器。如果您不需要支持可能仍在使用这些功能的旧代码库(因此早于 Python 3.5),我只会坚持使用这些inspect.is*()函数。
| 归档时间: |
|
| 查看次数: |
3038 次 |
| 最近记录: |