一:什么协程
协程: coroutine/coro
- 轻量级线程(一个线程)
- 调度由用户控制
- 有独立的寄存器上下文和栈
- 切换时保存状态,回来时恢复
二:协程和多线程比较
协程: coroutine/coro
- 轻量级线程(一个线程)
- 调度由用户控制
- 有独立的寄存器上下文和栈
- 切换时保存状态,回来时恢复
- 异步
- 一次调用,多个入口和结果
多进程,多线程
- 系统调度
- 上下文切换
- 占用内存
- 耗费CPU时间
- 同步
- 一次调用一次返回
三:python中协程发展
Python中协程的发展
•Python 2.5 (PEP 342) -> yield
•Python 3.3 (PEP 380) -> yield from
•Python 3.4 (PEP3156)-> asyncio
•Python 3.5 (PEP 0492).async/await
•Eventlet
•Greenlet
•gevent
四:协程使用发展
1.协程1期:模拟阶段
- 嵌套yield的函数交互运行
- next/send(None)激活yield
- send(data)向yield发送数据
示例1
1 import time 2 3 4 def consumer(): 5 r = '' 6 while True: 7 n = yield r #生成器,遇到yield就停止,并返回到porducer,等send信号,在继续向下执行,执行完了返回到yield处,并返回r 8 if not n: 9 return 10 print('[CONSUMR] Consuming %s' %n) 11 time.sleep(1) 12 r = '200 OK' 13 14 15 def produce(c): 16 next(c) #第一次调用生成器 17 n = 0 18 while n < 5: 19 n += 1 20 print('[PRODUCE] Producing %s' % n) 21 r = c.send(n) #给生成器发送数据,并把yeild返回的数据给r 22 print('[PRODUCE] Producing %s' % r,n) 23 c.close() 24 25 26 if __name__ == '__main__': 27 c = consumer() 28 produce(c)