一、yield支持下的协程
1 import time 2 def consumer(name): #加了yield的函数叫生成器 3 print('...%s要吃包子...' %name) 4 while True: 5 new_baozi = yield 6 print('%s is eating baozi %s' %(name,new_baozi)) 7 8 def producer(): 9 next(con) 10 next(con2) 11 print('包子制作中......') 12 time.sleep(1) 13 n = 0 14 while n < 5: 15 n += 1 16 con.send(n) 17 con2.send(n) 18 19 20 if __name__ == '__main__': 21 con = consumer('c1') #创建生成器对象 22 con2 = consumer('c2') 23 p = producer() #执行函数
二、gevent库中greenlet支持的协程
1 from greenlet import greenlet 2 3 def test1(): 4 print('1 2') 5 gr2.switch() 6 print('5 6') 7 gr2.switch() 8 9 def test2(): 10 print('3 4') 11 gr1.switch() 12 print('7 8') 13 14 gr1 = greenlet(test1) #创建greenlet对象 15 gr2 = greenlet(test2) 16 gr1.switch() #switch开启该对象下的方法 17 '''通过switch实现上下文的切换'''
三、gevent库中gevent模块下的协程
1 from gevent import monkey 2 monkey.patch_all() #最大程度监听I/O阻塞,节省时间 3 import gevent 4 def foo(): 5 print('Running in foo') 6 gevent.sleep(1) #模拟I/O阻塞 7 print('Explicit context switch to foo again') 8 9 def bar(): 10 print('Explicit context to bar') 11 gevent.sleep(1) 12 print('Implicit context switch back to bar') 13 14 gevent.joinall([gevent.spawn(foo), 15 gevent.spawn(bar)]) 16 '''遇到I/O阻塞自动切换'''
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步