协程的本质是一个线程执行多个任务,检测到I/O操作就切换任务执行,以实现更高效的利用CPU
gevent可以实现任务间的切换
from gevent import monkey monkey.patch_all() import gevent import time """ gevent默认只识别自身模块中的I/O操作,所以time.sleep()不会进行切换 但是gevent和 monkey + monkey.patch_all()进行配合就可以检测到导入的 所有模块中的I/O操作 """ def eat(): print('eat1') time.sleep(1) # 这里也有I/O操作了但是没有进行切换② gevent.sleep(1) # 只有这样的I/O 才识别 print('eat2') def sleep(): print('sleep1') time.sleep(1) # 如果不利用monkey gevent不识别time模块的I/O 不会进行切换 print('sleep2') g1 = gevent.spawn(eat) g2 = gevent.spawn(sleep) gevent.sleep(2) # 检测到主任务有了I/O操作就切换了① gevent.joinall([g1,g2])