python 协程
2017-12-16 20:53
162 查看
通过 yield 方式实现
greenlet 实现手动切换协程
gevent 实现自动切换
# -*- coding: utf-8 -*- ''' 协程,又称为线程,是一种用户装态的轻量级线程。 协程拥有自己的寄存器上下文和栈,在调度切换时,将寄存器上下文和栈保存在其他地方, 在切回来的时候恢复到先前保存的寄存器上下文和栈 协程的好处: 1.无需线程上下文切换的开销 2.方便切换控制流,简化编程模型 3.无需院子操作锁定及同步的开销 4.高并发,高扩展,低成本 缺点: 1.无法利用多核资源 2.阻塞操作会阻塞整个程序 ''' import time import queue def consumer(name): print("------->start eating baozi") while True: #函数中有yield的时候这个函数会变成一个生成器,当调用__next()__方法的时候会继续运行 new_baozi = yield print("[%s] is eating baozi %s"%(name,new_baozi)) def producer(): r = con.__next__() r = con2.__next__() n=0 while n<5: n+=1 con.send(n) con2.send(n) print('%s making baozi '%n) if __name__=='__main__': con = consumer('c1') con2 = consumer('c2') p = producer()
greenlet 实现手动切换协程
# -*- coding: utf-8 -*- from greenlet import greenlet def test1(): print(12) gr2.switch() print(34) gr2.switch() def test2(): print(56) gr1.switch() print(78) #启动一个协程 gr1 = greenlet(test1) gr2 = greenlet(test2) gr1.switch() #协程的切换
gevent 实现自动切换
import gevent def foo(): print('runing in foo') gevent.sleep(2) print('再次切回到foo') def bar(): print("切换到bar") gevent.sleep(1) print('切换回bar') gevent.joinall([ gevent.spawn(foo), gevent.spawn(bar), ])
相关文章推荐
- Python开发【第九篇】:协程、异步IO
- python协程
- python进程、线程、协程
- Python中的异步IO和协程
- 关于Python的进程线程协程之threading模块(一)Thread类
- 关于Python的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象
- Python:线程、进程与协程(7)——线程池
- 多协程实例讲解(python 三)
- python协程
- 深入浅析python中的多进程、多线程、协程
- Python 学习笔记 - 协程
- Python学习-并发编程之协程
- [置顶] 【python 协程】10分钟了解下协程
- python 协程 深入浅出(二)
- Python 10--协程、异步IO、redis缓存、rabbitMQ队列
- python 协程小程序(草稿有待完善)
- Python 中的进程、线程、协程、同步、异步、回调
- 关于python协程的一个例子的学习
- Python学习总结笔记(7)-- 生成器与协程
- python由生成器构成的协程语法