首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这两种基于生成器的协同线是相同的概念吗?

这两种基于生成器的协同线是相同的概念吗?
EN

Stack Overflow用户
提问于 2017-10-19 12:41:44
回答 2查看 371关注 0票数 1

似乎有两种基于发电机的协同线:

  1. 回覆发回: 基于生成器的coroutine:由types.coroutine包装的生成器(def + yield)。如果需要将其视为协同对象,则需要将其包装在types.coroutine中。
  2. 简单地说,Python并没有明确称它为“基于生成器的协同器”: 当您编写基于asyncio的Python代码(理想情况下也使用来自asyncio.org的外接程序模块)时,您通常会编写协同函数。包括Python3.4,这类函数是使用第95页“产自(v3-只)”中包含的yield from语句生成的,用@asyncio.coroutine修饰,在第518页中包含“异步协同”;

来自https://www.python.org/dev/peps/pep-0492/#differences-from-generators

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

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

这两种基于生成器的协同线是相同的概念吗?

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-20 00:11:38

它们是同类型的协同素。types.coroutineasyncio.coroutine只是创建它们的两种不同的方法。

asyncio.coroutine更老了,早于async协同系统的引入,而且它的功能已经从原来的行为有所改变,因为async协同机制已经存在了。

asyncio.coroutinetypes.coroutine有着微妙的不同行为,特别是如果应用于生成器函数以外的任何东西,或者异步应用在调试模式中。

票数 2
EN

Stack Overflow用户

发布于 2017-10-19 23:59:10

就我而言,async def是定义协同线的适当的方法。yieldyield from在生成器中有其用途,它们还用于实现“期货”,这是一种处理不同协同上下文之间切换的低级机制。

几个月前我做了这张图来总结他们之间的关系。但坦率地说,你可以安全地忽略整个业务。事件循环负责处理管理协同执行的所有低级细节,所以请使用其中之一,如异步。还有用于其他事件循环的asyncio-compatible包装器,比如我自己用于GLib/GTK的glibcoro

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46830144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档