首页
学习
活动
专区
圈层
工具
发布

十、python学习笔记-协程-gevent下的协程

代码语言:javascript
复制
# 需要安装gevent模块
"""通过greenlet的switch方法实现切换
1、定义两个函数,foo1打印bar1和bar2,foo2打印bar3和bar4,中间使用switch方法切换。
2、实例化gr1和gr2实例,分别对应foo1和foo2.
3、通过gr1.switch()运行程序,开始执行foo1,执行顺手安装下面示例注释
4、遇到对象的switch方法就会切换到对应的函数去执行
"""
# 示例1、演示greenlet的switch方法
from greenlet import greenlet


def foo1():
    print('bar1')       # 4、打印bar1
    gr2.switch()        # 5、qr2的switch方法,进入foo2
    print('bar2')       # 8、打印bar2
    gr2.switch()        # 9、qr2的switch方法,进入foo2


def foo2():
    print('bar3')       # 6、打印bar3
    gr1.switch()        # 7、qr1的switch方法,进入foo1
    print('bar4')       # 10、打印bar4,结束


if __name__ == '__main__':
    gr1 = greenlet(foo1)        # 1、实例化gr1生成器
    gr2 = greenlet(foo2)        # 2、实例化gr2生成器

    gr1.switch()                # 3,开始执行程序,进入foo1


# gevent,遇到IO阻塞就会切换
"""
1、定义两个函数,foo3打印bar1和bar2,foo4打印bar3和bar4,中间使用gevent.sleep(1)模拟IO阻塞。
2、实例化ge1和ge2两个实例,分别对应foo3和foo3.
3、gevent.joinall([])方法进入程序,参数是个列表,当发生IO阻塞时会自动执行列表中的其他内容。
4、遇到对象的switch方法就会切换到对应的函数去执行
"""
import gevent


def foo3():
    print('bar1')
    gevent.sleep(1)
    print('bar2')


def foo4():
    print('bar3')
    gevent.sleep(1)
    print('bar4')


if __name__ == '__main__':
    ge1 = gevent.spawn(foo3)
    ge2 = gevent.spawn(foo4)
    ge3 = gevent.spawn(foo3)
    gevent.joinall([ge1, ge2])
举报
领券