当前位置: 首页 > 知识库问答 >
问题:

这两种基于生成器的协程是同一个概念吗?

苗承
2023-03-14

似乎有两种基于生成器的协同程序

>

  • Jim Fasarakis Hilliard的回复:

    基于生成器的协程:由types.coroutine包装的生成器(def)。如果需要将其视为协程对象,则需要将其包装在types.coroutine中。

    简而言之,Python没有明确地将其称为“基于生成器的协同例程”:

    当您基于asyncio编写Python代码时(理想情况下也使用asyncio.org中的附加模块),您通常会编写协程函数。在包括Python 3.4之前,这些函数都是使用第95页“yield from(仅限v3)”中包含的“yield from(仅限v3)”语句生成的,并用asyncio修饰。协同路由,见第518页的“asyncio协同路由”;

    从…起https://www.python.org/dev/peps/pep-0492/#differences-来自发电机

    基于生成器的协同路由(对于异步代码,必须用@asyncio.coroutine修饰)

    http://masnun.com/2015/11/13/python-generators-coroutines-native-coroutines-and-async-await.html也称之为“基于生成器的协同程序”。

    这两种基于生成器的协程是同一个概念吗?

    如果没有,它们在目的和用法上有什么不同?

    谢谢

  • 共有2个答案

    连时铭
    2023-03-14

    他们是同一类型的合作伙伴<代码>类型。协同路由和异步。协同路由只是创建它们的两种不同方式。

    异步。协程较旧,早于异步协程的引入,并且由于异步协程的存在,其功能已经从最初的行为有所改变。

    异步。协同路由和类型。协程具有微妙的不同行为,尤其是当应用于除生成器函数以外的任何对象时,或者如果asyncio处于调试模式时。

    公冶俊达
    2023-03-14

    就我而言,异步定义是定义协同路由的正确方法<代码>收益率和来自的收益率在生成器中有其用途,它们还用于实现“未来”,这是处理不同协同路由上下文之间切换的低级机制。

    几个月前,我绘制了这个图表来总结它们之间的关系。但坦率地说,你完全可以忽略整个事情。事件循环的任务是处理管理协同路由执行的所有低级细节,因此请使用其中之一,例如asyncio。对于其他事件循环,也有与asyncio兼容的包装器,例如我自己的glibcoro用于GLib/GTK。

    换句话说,坚持使用asyncio API,就可以编写“事件循环无关”的协同路由!

     类似资料:
    • 概括来说,从 Saga 内触发异步操作(Side Effect)总是由 yield 一些声明式的 Effect 来完成的 (你也可以直接 yield Promise,但是这会让测试变得困难,就像我们在第一节中看到的一样)。 一个 Saga 所做的实际上是组合那些所有的 Effect,共同实现所需的控制流。 最简单的是只需把 yield 一个接一个地放置,就可对 yield 过的 Effect 进行

    • 我正在我的人工智能实验室下学习Prolog,从源码开始学习Prolog吧! 在第五章中,我们来学习累加器。作为示例,给出了这两段代码。要查找列表的长度 无累加器: 带累加器: 我不明白,这两个片段在概念上有什么不同?累加器到底有什么不同?又有什么好处? 累加器听起来像中间变量。(如果我错了请纠正我。)到目前为止,我已经在我的程序中使用了它们,所以这真的是一个很大的概念吗?

    • 在开始学习Keras之前,我们希望传递一些关于Keras,关于深度学习的基本概念和技术,我们建议新手在使用Keras之前浏览一下本页面提到的内容,这将减少你学习中的困惑 符号计算 Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都是一个“符号主义”的库。 因此,这也使得Keras的编程与传统的Python代码有所

    • 在开始学习Keras之前,我们希望传递一些关于Keras,关于深度学习的基本概念和技术,我们建议新手在使用Keras之前浏览一下本页面提到的内容,这将减少你学习中的困惑 符号计算 Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都是一个“符号式”的库。 因此,这也使得Keras的编程与传统的Python代码有所差

    • 本文向大家介绍浅析python协程相关概念,包括了浅析python协程相关概念的使用技巧和注意事项,需要的朋友参考一下 这篇文章是读者朋友的python协程的学习经验之谈,以下是全部内容: 协程的历史说来话长,要从生成器开始讲起。 如果你看过我之前的文章python奇遇记:迭代器和生成器 ,对生成器的概念应该很了解。生成器节省内存,用的时候才生成结果。   与生成器产出数据不同的是,协程在产出数据

    • 下面介绍 BindingX 中涉及到的一些核心概念,它们分别是 表达式 、 事件类型 、 属性变换 。要想使用 BindingX 必须先理解这些概念。 表达式(Expression) 表达式,是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合。譬如, x\*3+10 就是一个表达式,当x被赋值时,整个表达式就会有一个明确的结果。通过表达式,我们就可以描述一个具体的交互行为,比如我们希望