基于生成器的协程与原生协程

2023-11-24

我刚刚读过PEP0492谈论协程的新方法,但 PEP 未能让我理解基于生成器的协程和本机协程之间的区别。有人可以告诉我其中的区别(也许可以举例)吗?

据我了解,他们使用不同的词(yield/yield from 和 wait/async/yield)。据我所知,在本机协程结束时预计会产生收益,但这也适用于基于生成器的协程。


扩展一下 Mike S 所写的内容:CPython 中的本机协程与生成器共享大部分相同的代码,因此功能上几乎没有差异。然而,我认为 PEP-492 超越了“语法糖”的门槛。生成器和本机协程具有不同的用途,因此新语法阐明了作者的意图,并且可以完成旧语法无法完成的事情。这里有些例子:

  • 生成器是可迭代的,而原生协程则不是。
  • 本机协程还允许使用新语法,例如异步上下文管理器和异步迭代器。
  • 协程具有有用的调试消息,例如如果你从来没有警告过await一个协程对象。

新的语法也很好地反映了asyncio库并且类似于其他语言中使用的关键字。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于生成器的协程与原生协程 的相关文章

随机推荐

  • 在 Laravel API 中使用会话

    在 laravel 5 5 中创建双因素短信验证并通过dingo包 我遵循这个简化的工作流程 首先检查登录函数中的 isTwoFactorActive 是 true 还是 false 如果为 true 则发送 SMS 并给出响应以获取收到的
  • 如何在Java中迭代日期范围?

    在我的脚本中 我需要在给定开始日期和结束日期的情况下在日期范围内执行一组操作 请为我提供使用 Java 实现此目标的指导 for currentDate starDate currentDate lt endDate currentDate
  • 使用 AngularJS 超时

    我是 AngularJS 的新手 我目前正在研究 timeout 服务 我知道它就像 setTimeout 函数的包装器 文档说它提供了异常处理 此外 文档说我可以取消并刷新超时 有人可以向我解释一下超时时何时会发生异常吗 我也不明白为什么
  • CodeIgniter 全局变量

    我在用 data在我看来 this gt load gt view my view data 我还按照本指南自动加载了控制器扩展核心控制器 但我想让 data 全球化 因为在views有一个侧边栏对于整个项目来说是不变的 并显示通过自动加载
  • 特金特。创建多个具有“不同”命令功能的按钮

    首先 对这个标题感到抱歉 我找不到更好的标题 以下代码是我的 Python 程序中遇到的问题的最小化版本 顺便说一句 我是新手 def onClick i print This is Button str i return def star
  • CLLocationDegrees 初始化

    如何制作 CLLocationDegrees 它不是浮动 那么它是什么 根据CLLocation文档 CLLocationDegrees简直就是一个双倍 因此 要创建一个 您可以执行如下简单的操作 CLLocationDegrees deg
  • 为什么 HttpContext.Current 为空?

    我有一个在所有应用程序中使用的值 我在application start中设置了这个 void Application Start object sender EventArgs e Dictionary
  • 如何链接滚动条和滚动查看器

    我目前有两个 ScrollViewer 其中包含同一集合的备用视图 我通过处理 ScrollChanged 事件并使用 ScrollToVerticalOffset 将两个滚动查看器的滚动绑定在一起 出于演示原因 我已将两个 ScrollV
  • Android 中如何检查 URL 是否有效

    有没有一种好方法可以避免导致应用程序崩溃的 主机未解析 错误 有某种方法可以尝试连接到主机 例如 URL 并查看它是否有效 Use URLUtil验证 URL 如下所示 URLUtil isValidUrl url 它会返回如果 URL 有
  • 这个 Perl 正则表达式中的“?”是什么意思?

    我有一个 Perl 正则表达式 但我不确定什么是 在此上下文中的意思 m w 什么是 意思是这里 在这种情况下 实际上是与 放在一起 在分组的开头意味着分组但不捕获括号内的文本 模式 例如 它不会存储在任何反向引用中 例如 1 or 1 因
  • CMake - 依赖于另一个 cmake 项目

    我正在从事的项目具有以下结构 Library1 build include src CMakeLists txt Library2 build include src CMakeLists txt Executable1 build inc
  • 使用@@identity而不是scope_identity的原因

    在 SQL Server 2005 数据库上 我们的一位远程开发人员刚刚签入了对存储过程的更改 该更改将 select scope identity 更改为 select identity 您知道为什么要使用 identity 而不是sco
  • CUDA:CPU 定时器和 CUDA 定时器事件之间的区别?

    使用 a 有什么区别CPU定时器和CUDA定时器事件测量执行某些 CUDA 代码所需的时间 CUDA 程序员应该使用其中哪一个 为什么 我知道的 CPU定时器使用将涉及调用cudaThreadSynchronize在任何时间被记录之前 为了
  • Ipython 可以在命令提示符下运行,但不能在浏览器中运行

    我使用的是 Windows 8 64 位笔记本电脑 我的电脑上已经安装了 python 2 7 所以我使用 easy install 安装了 Ipython 我现在可以在 C Python27 Scripts 中看到 ipython 应用程
  • 在 For Of 循环中使用对象

    为什么不能在 for of 循环中使用对象 或者这是一个浏览器错误 这段代码在 Chrome 42 中不起作用 表示 undefined 不是一个函数 test first one for var item of test console
  • numpy的fft结果的幅度要乘以采样周期?

    我尝试用一 个例子来验证我对 Numpy 的 FFT 的理解 exp pi t 2 应该exp pi f 2 当没有对直接变换应用缩放时 但是 我发现要获得这个结果 我需要将 FFT 的结果乘以一个因子dt 这是我的函数上两个样本点之间的时
  • 使用 date_format 选择日期范围 MySQL

    我在使用 MySQL 选择日期范围时遇到问题 SELECT MvtDate date format MvtDate d m Y FROM immmvt WHERE date format MvtDate d m Y BETWEEN 01 0
  • 自定义to_yaml和domain_type

    我需要定义用于序列化 反序列化对象的自定义方法 我想做如下的事情 class Person def to yaml type example com 2010 11 30 Person end def to yaml string repr
  • 管理 IO 单子

    我正在学习一些 Haskell 请原谅新手错误 这个例程出错了 我对 do exister String gt Bool exister path do fileexist lt doesFileExist path direxist lt
  • 基于生成器的协程与原生协程

    我刚刚读过PEP0492谈论协程的新方法 但 PEP 未能让我理解基于生成器的协程和本机协程之间的区别 有人可以告诉我其中的区别 也许可以举例 吗 据我了解 他们使用不同的词 yield yield from 和 wait async yi