协程: 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)
协程yeild send