Python协程,完美掌握!
声明:本人的一切著作,禁止用于以营销为目的的任何转载! 前言 很久以前就听说 Python 的 async/await 很厉害,但是直到现在都没有用过,一直都在用多线程模型来解决各种问题。最近看到隔壁的 Go 又很火,所以决定花时间研究下 Python 协程相关的内容,终于在翻阅了一裤衩的资料之后有了一些理解。 起:一切从生成器开始 以往在 Python 开发中,如果需要进行并发编程,通常是使用多线程 / 多进程模型实现的。由于 GIL 的存在,多线程对于计算密集型的任务并不十分友好,而对于 IO 密集型任务,可以在等待 IO 的时候进行线程调度,让出 GIL,实现『假并发』。 当然对于 IO 密集型的任务另外一种选择就是协程,协程其实是运行在单个线程中的,避免了多线程模型中的线程上下文切换,减少了很大的开销。为了理解协程、async/await、asyncio,我们要从最古老的生成器开始。 回顾 Python 的历史,生成器这个概念第一次被提出的时候是在PEP 255中被提出的,当时的 Python 版本为 Python2.2。我们都知道range()函数,现在考虑一下我们来编写一个自己的range()函数,最直接最容易想到的方法也许是这样: 当你想创建一个很小的序列的时候,例如创建从 0 到 100 这样的列表,似乎没什么问题。但是如果想创建一个从 0 到 999999999