初识gevent模块

协程的本质是一个线程执行多个任务,检测到I/O操做就切换任务执行,以实现更高效的利用CPUspa

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])
相关文章
相关标签/搜索