#一、生產者和消費者模型producer and consumer modelimport timedef producer(): ret = [] for i in range(2): time.sleep(0.2) ret.append("包子%s" %i) return retdef consumer(res): for index,baozi in enumerate(res): time.sleep(0.2) print("第%s我的,吃了%s" %(index,baozi))res = producer()consumer(res)print("上面的結束了-------------------------------------------------------------")#二、單線程下實現高併發def test(): print("開始啦") firt = yield #這個1至關於return的1,至關於函數的返回值,而yield會接收一個值傳送給firt,這個firt是函數內部的局部變量 print("第一次",firt) yield 2 print("第二次")t = test()res = t.__next__() #等同於next(t) 定義res的意思是定義返回值也就是上面的yield的返回值1print(res)# t.__next__()#生成器下面的send方法# res = t.send(None) #t.send(None)就send給yield1了 yield1能夠賦值firt send(None)能夠保證函數接着運行 send(None)裏面的參數會傳給賦值res = t.send("函數停留在first那個位置,我就是給first賦值的") #send能夠觸發print(res)#t.__next__方法就等同於t.send(None)方法print("上面的結束了了了--------------------------------------------------------------------------------------------------------ll")#併發:兩個程序同時在等待,A程序生產完成調到B程序,B程序生產完成之後再跳到A程序,來回切換的過程,兩個程序沒有前後的順序import timedef consumer(name): print("我是[%s,我準備開始吃包子了]" %name) while True: baozi = yield #yield表明等待包子的過程 time.sleep(1) print("%s 很開心的把【%s】吃掉了" %(name,baozi))def producer(): c1 = consumer("wupeiqi") c2 = consumer("yuanhao_SB") c1.__next__() c2.__next__() for i in range(10): time.sleep(1) c1.send("包子 %s" %i) c2.send("包子 %s" %i)producer() #調用producer函數由send觸發了另一個函數,由另一個函數結束了之後又跳到了原先的函數,而後接着send