并发编程 协程演变过程

3.4.协程引入

1.yield from

扩展(可忽略)

扩展的正确处理

1.yield版协程

PEP 380(含分析)

2.async/await

3.4.协程引入

1.yield from

我们经常有这样的需求:

平时可以借用 来遍历:

输出:

它的内部实现其实是这样的:( )

然后 之后语法再一步简化()

输出:

扩展(可忽略)

其实知道了内部实现,很容易就写上一段应对的处理:

输出:

扩展的正确处理

PS:一般不会这么干的,一般都是 遍历并处理:

1.yield版协程

协程的目的其实很简单:像写同步代码那样实现异步编程

先看个需求:生成绘图的数据( )

比如说原来数据是这样的:

处理之后:

处理过的数据一般用来画图,实际效果类似于:

如果不借助协程,我们一般这么处理:(数据库获取过程省略)

改成yield版的协程也很方便,基本上代码没有变,也不用像IO多路复用那样来回的回调

简单解析一下:(用 的目的就是为了引出等会说的 )

(委托生成器 )的好处就是让调用方( )和 子生成器( )直接建立一个双向通道

你也可以把 当作一个中介(如果不理解就把 想象成 就容易理解了),本质就是下面代码:

PEP 380(含分析)

内部其实在 基础上做了很多事情(比如一些异常的处理),具体可以看看PEP 380

先提炼一个 的:

现在再来看 压力就没有那么大了:

2.async/await

把上面的原生代码用 改装一下:(协程的目的就是像写同步代码一样写异步,这个才算是真做到了)

输出:(是不是很原生代码没啥区别?)

下级预估:asyncio

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181212G05U6L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券