封面图片来源:沙沙野
协程
- 协程的概念
- 协程的本质是一条线程分成多份,每一份去执行一段代码
- 多段代码能够在一条线程之间来回切换
- 如果能够在一段代码执行遇到阻塞的过程中切换到另一段可以执行的代码上,相当于完成了利用协程更加充分利用线程的目的
2. 协程利用切换来规避IO操作带来的好处是:
- 一条线程能够执行多个任务
- 减少了一条线程的阻塞,帮助线程在操作系统调度的时候多抢占 cpu
- 协程由于操作系统不可见,所以协程的切换不是由操作系统控制的,而是由程序员控制,因为协程是用户级
- 协程之间永远数据安全,因为它只是在一条线程中进行任务的切换
3. 使用 yield 实现协程函数
def
4. 串行执行
import
5. 基于 yield 并发执行
import
6. 单纯的线程之间两个任务切换是会浪费时间的,如果数据量非常大,存储数据也需要时间;如果每一次切换都要记录当前的状态,在切换回来之后还要读取之前的状态
import
7. 虽然 yield 能实现协程函数,但是不能规避 IO 操作,因此可以使用模块
# gevent:规避io操作,判断程序中的io,遇到io就切换到另一个任务来执行
import
import
import
import
from