协程gevent模块的使用_gevent.spawn-CSDN博客
阅读上面的博客,就可以理解 gevent.monkey 的作用,就是自动将socket、time等标准库替换成异步的库,是gevent让代码从同步变成异步的一种方式
现在来一段上面博客的代码
import gevent
# 函数1
def func1():
for i in range(3):
print("=========== 正在做事情1 ============")
time.sleep(1)
# 函数2
def func2():
for i in range(4):
print("=========== 正在做事情2 ============")
time.sleep(1)
jobs = [
gevent.spawn(func1),
gevent.spawn(func2())
]
gevent.joinall(jobs)
如果没有引入 gevent.monkey,代码是同步执行的,gevent没有检测到 io 操作,于是不会在io等待期间,执行其他协程task
引入gevent.monkey 替换time模块
how to do?
方式1: monkey.patch_模块名,这里的话是 monkey.patch_time
方式2: monkey.patch_all(模块名=True) ,这里的话是 monkey.patch_all(time=True)
from gevent import monkey
# 对所有的IO和耗时操作打补丁
monkey.patch_all(time=True)
再看一下patch_all 函数源码,time 参数默认是True,因此直接使用monkey.patch_all()也可以让time替换成异步模块
于是有个疑问🤔️,time模块替换成什么了
name 是 “time”
gevent_module 就是那个模块,time 替换成了gevent.time 模块,
哦,原来gevent实现了一个time模块,gevent.time 模块怎么实现的呢,这个问题先留个后续吧