生產者和消費者模型producer and consumer(單線程下實現高併發)

#一、生產者和消費者模型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
相關文章
相關標籤/搜索