# 需要安装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])