初识gevent模块

协程的本质是一个线程执行多个任务,检测到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])

猜你喜欢

转载自www.cnblogs.com/gzying-01/p/10386074.html