Python 发电机功能和异步发电机功能的用途有什么区别

Python 发电机功能和异步发电机功能的用途有什么区别,python,python-3.x,asynchronous,python-3.6,coroutine,Python,Python 3.x,Asynchronous,Python 3.6,Coroutine,在Python中,异步生成器函数是协程,生成器函数也是协程 发电机功能和异步发电机功能的用途有什么区别 谢谢。的用途与引入的发电机非常相似。它主要是为了使事情更容易实现,只是在不同的领域(异步领域)。从政治公众人物525: 本质上,应用于异步执行案例的PEP 255的目标和基本原理也适用于此方案 简而言之,它使编写支持的对象变得简单。就像迭代器协议的生成器一样 您不必定义实现\uuu aiter\uuu和\uu anext\uuu的对象,而是创建了一个异步生成器,它似乎通过魔法实现了这一点。这反

在Python中,异步生成器函数是协程,生成器函数也是协程

发电机功能和异步发电机功能的用途有什么区别

谢谢。

的用途与引入的发电机非常相似。它主要是为了使事情更容易实现,只是在不同的领域(异步领域)。从政治公众人物525:

本质上,应用于异步执行案例的PEP 255的目标和基本原理也适用于此方案

简而言之,它使编写支持的对象变得简单。就像迭代器协议的生成器一样

您不必定义实现
\uuu aiter\uuu
\uu anext\uuu
的对象,而是创建了一个异步生成器,它似乎通过魔法实现了这一点。这反映了生成器为迭代器协议所做的工作;您可以创建一个生成器,而不是为对象实现
\uuuuu iter\uuuu
\uuuu next\uuuuuuu

这在rational of PEP 525中得到了很好的说明,其中还包括一个很好的示例,该示例显示了在使用异步生成器时所编写代码的节省

除了节省代码长度外,异步生成器的性能也要好得多:

性能是这个建议的另一个要点:在我们对参考实现的测试中,异步生成器比作为异步迭代器实现的等效生成器快2倍


只是在这里添加一些术语,因为有时很难跟踪术语:

  • 生成器:
    def
    包含一个或多个
    的函数产生
    表达式
  • 基于生成器的协同程序:由封装的生成器(
    def
    +
    yield
    )。如果需要将其视为协同程序对象,则需要将其包装为
    类型.coroutine
  • 异步生成器:
    async def
    包含一个或多个
    表达式的函数产生
    表达式。这些表达式还可以包含
    wait
    表达式
  • 协同程序:
    async def
    不带零个或多个
    wait
    s和no
    yield
    s

谢谢。在“Asynchronous Generator:Asynchronous def functions that contain a yield expression”(异步生成器:包含产量表达式的异步def函数)中,您的意思是
await
而不是
yield
?@Tim否否,如果在
异步def
中只有
await
,您将得到一个协同程序。
yield
async def
中的存在使其成为一个异步生成器:-)。就其用途而言,“异步生成器”、基于生成器的协同程序和生成器之间有什么区别?(不仅仅是您描述的定义方式)@Tim生成器用作数据生产者(它们产生值)。基于生成器的协同程序用作使用者(您
。将
值发送给它们或它们
从中产生的子生成器)。异步生成器是异步数据生产者(而协同程序是异步数据消费者)。谢谢。我想知道一些关于生产者和消费者的问题。我还想知道一些关于术语“基于生成器的协同程序”的问题,如果这个问题太广泛,我提供的长度的答案是不可能的。不要随意投票。