協程python
1.協程 又稱微線程 是一種輕量級線程 攜程有本身的寄存器 上下文 和棧 攜程能保留上一次調用時的狀態併發
2.協程優勢和缺點 :函數
1.無需線程上下文切換的開銷高併發
2.無需原子操做鎖定及同步的開銷spa
3.高併發 高擴展性 低成本線程
缺點:code
1.沒法利用多核資源協程
2.阻塞操做會阻塞整個程序blog
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"""歡迎糾錯