在Python中,异步生成器函数是协程,而生成器函数也是协程。
生成器函数和异步生成器函数的目的有什么区别?
谢谢。
生成器函数和异步生成器函数的目的有什么区别?
谢谢。
PEP 525 -- 异步生成器的目的与PEP 255 -- 简单生成器相似,其引入了生成器。它主要旨在使事情更易于实现,但在不同的领域(异步)中。PEP 525的定义如下:
本质上,针对异步执行情况的 PEP 255 的目标和基本原理同样适用于本提案。
简而言之,它使编写支持 异步迭代协议 的对象变得容易。就像 生成器 对于 迭代器协议 所做的一样。
不需要定义实现__aiter__和__anext__的对象,您可以创建一个异步生成器来完成这个看似神奇的工作。这类似于生成器对迭代器协议所做的工作;您只需创建一个生成器,而不必为对象实现__iter__和__next__。这里为了增加一些术语,因为有时候术语很难跟上:
yield
表达式的def
函数。types.coroutine
包装的生成器(def
+ yield
)。如果您需要将其视为协程对象,则需要在其中包装types.coroutine
。yield
表达式的async def
函数。这些也可以包含await
表达式。await
和没有yield
的async def
。await
而不是yield
吗? - Timasync def
中只有一个await
,那么你会获得一个协程。而在async def
中存在yield
才使它成为异步生成器 :-). - Dimitris Fasarakis Hilliardyield
语句产出值)。基于生成器的协程则被用作数据的消费者(你可以使用 .send
方法向其发送值,或使用 yield from
向其子生成器发送值)。异步生成器是异步数据的生产者(而协程则是异步数据的消费者)。 - Dimitris Fasarakis Hilliard