一、引入
本章节主要介绍,使用单线程实现并发,即只用一个主线程(很明显可利用CPU只有一个),为此我们需要先回顾下并发的本质:切换+保存状态
ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态
二、协程介绍
单线程下并发称为:协程
特点:
- 单线程下的IO等待降到最低,也就是说协程时,遇到IO会切换执行另一个任务,因此将可以将单线程的能力发挥到最大
缺点:
- 不能实现并行
- 单线程下的多个任务一旦遇到IO,整个线程都会阻塞,所有任务都停滞
三、Gevent模块
Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在Python内我们使用这个模块,可以让我们的程序运行,达到一个协程的效果
使用方式:
import gevent
g1 = gevent.spawn(func,args,kwargs)
g1 = gevent.spawn(func,args,kwargs)
g1.join() # 等待g1结束
g2.join() # 等待g2结束
# 或者二合一 gevent.joinall([g1,g2])
g1.value # 拿到g1执行func的返回值
遇到IO自动切换任务
import gevent
def test1(name):
print(f'{name} test1 running')
gevent.sleep(2)
print(f'{name} test1 stop')
def test2(name):