gevent模块
'''gevent:
是一个第三方模块,可以帮你监听IO操作, 并切换.
- 使用gevent目的:
为了实现单线程下,实现遇到IO, 保存状态 + 切换
pip3 install gevent
'''
from gevent import monkey
monkey.patch_all() # 可以监听该程序下所有的IO操作
import time
from gevent import spawn, joinall # 用于做切换 + 保存状态
def func1():
print('1')
# IO操作
time.sleep(1)
def func2():
print('2')
time.sleep(3)
def func3():
print('3')
time.sleep(5)
start_time = time.time()
s1 = spawn(func1)
s2 = spawn(func2)
s3 = spawn(func3)
# s2.join() # 发送信号,相当于等待自己 (在单线程的情况下)
# s1.join()
# s3.join()
# 必须传序列类型
joinall([s1, s2, s3])
end_time = time.time()
print(end_time - start_time)
注意:from gevent import monkey;monkey.patch_all()必须放到被打补丁者的前面,如time,socket模块之前
猴子补丁是一种大规模覆盖api的补丁,慎用