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
领取专属 10元无门槛券
私享最新 技术干货