协程
1.协程 又称微线程 是一种轻量级线程 携程有自己的寄存器 上下文 和栈 携程能保留上一次调用时的状态
2.协程优点和缺点 :
1.无需线程上下文切换的开销
2.无需原子操作锁定及同步的开销
3.高并发 高扩展性 低成本
缺点:
1.无法利用多核资源
2.阻塞操作会阻塞整个程序
python利用 yield来达到携程效果,:先看下 关于yield的两个用法 ( yield from 是python3 的方法)
def aa(): for i in 'ab': yield i for i2 in range(0, 3): yield i2 print list(aa()) 》》》 ['a', 'b', 0, 1, 2] def bb(): yield from 'ab' yield from range(3) print (list(bb())) 》》》 ['a', 'b', 0, 1, 2]
利用yield 来写一个经典的生产 消费者:
def consumer(name):# 消费者 print("--->starting") while True: new_baozi = yield print("[%s] is eating baozi %s" % (name, new_baozi)) def producer(): # r = con.__next__() r = con.send(None) #启动生成器 n = 0 while n < 5: n += 1 con.send(n) time.sleep(3) if __name__ == '__main__': con = consumer("c1") p = producer()
"""
1.给con赋值为消费者生成器函数
2.给p赋值为生产者函数
3.进入生产者函数 启动消费者生成器函数
4.进入消费者函数 遇到yield函数停止
5.返回到生产者函数 进入while 循环 给消费者函数发送n的值
6.进入消费者函数 此时yield的返回值为n
"""
欢迎纠错