【发布时间】:2023-03-21 22:00:02
【问题描述】:
文档说:
@asyncio.coroutine
装饰器来标记基于生成器的协程。这使得生成器可以使用 yield from 来调用 async def 协程,并且 使生成器能够被 async def 协程调用,例如 使用 await 表达式的实例。
_
@types.coroutine(gen_func)
这个函数转换一个生成器 函数转换为协程函数,该函数返回基于生成器 协程。基于生成器的协程仍然是生成器 迭代器,但也被认为是一个协程对象,并且是 可以等待的。但是,它可能不一定实现
__await__()方法。
所以看起来目的是一样的——将生成器标记为协程(Python3.5 及更高版本中的async def对某些功能做了什么)。
什么时候需要asyncio.coroutine,什么时候需要types.coroutine,有什么区别?
【问题讨论】:
-
查看代码差异很小,主要在于它们如何接受方法。
asyncio是一个必须与早期 Python 版本兼容的代码库,而types仅与 Python 本身一起分发。因此,您可以将asyncio.coroutine()视为types.coroutine()的反向端口,可用于其他Python 版本。 -
在最新的开发中,asyncio.coroutine 函数实际上是调用 types.coroutine(coro) 来包装结果
标签: python asynchronous python-3.5