python之生產(chǎn)者消費者模型實現(xiàn)詳解
更新時間:2019年07月27日 16:47:35 作者:bainianminguo
這篇文章主要介紹了python之生產(chǎn)者消費者模型實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
代碼及注釋如下
#Auther Bob #--*--conding:utf-8 --*-- #生產(chǎn)者消費者模型,這里的例子是這樣的,有一個廚師在做包子,有一個顧客在吃包子,有一個服務(wù)員在儲存包子,這個服務(wù)員我們就可以用queue來實現(xiàn) import threading import queue import time ''' def consumer(p,que): id = que.get() print("[%s]來吃包子了,我吃到的包子的名字是[%s]" %(p,id)) def prodcer(p,que): print("[%s]做了2個包子" %(p)) que.put("baozi[1]") print("baozi[1]做好了") que.put("baozi[2]") print("baozi[2]做好了") if __name__ == '__main__': que = queue.Queue() p = threading.Thread(target=prodcer,args=("Bob",que)) c1 = threading.Thread(target=consumer,args=("c1",que)) c2 = threading.Thread(target=consumer, args=("c2", que)) c3 = threading.Thread(target=consumer, args=("c3", que)) p.start() c1.start() c2.start() c3.start() # p.join() ''' #上面這個例子,如果沒有包子了,但是廚師會不知道,廚師也不會繼續(xù)做包子,而沒有吃到包子的人會一直等待,程序會一直不結(jié)束 #我們可以這樣做,消費者發(fā)現(xiàn)沒有包子了,告訴服務(wù)員,服務(wù)員在告訴廚師,這里我們就會遇到task.down def consumer(p): id = que.get() print("[%s]來吃包子了,我吃到的包子的名字是[%s]" %(p,id)) que.task_done() #如歸隊列為空了,則會通知que.join,que.join就不會阻塞了 """ def prodcer(p): while True: if que.qsize() < 3: # time.sleep(1) for i in range(2): print("[%s]做了包子[%d]" %(p,i)) que.put(i) que.join() #如果隊列一直不為空,則que.join會一直阻塞,如果隊列為空,則que.join就不阻塞了 """ def prodcer(p): while True: # time.sleep(1) for i in range(2): print("[%s]做了包子[%d]" %(p,i)) que.put(i) que.join() #如果隊列一直不為空,則que.join會一直阻塞,如果隊列為空,則que.join就不阻塞了 if __name__ == '__main__': que = queue.Queue() p = threading.Thread(target=prodcer,args=("Bob1",)) p2 = threading.Thread(target=prodcer, args=("Bob2",)) c1 = threading.Thread(target=consumer,args=("c1",)) c2 = threading.Thread(target=consumer, args=("c2",)) c3 = threading.Thread(target=consumer, args=("c3",)) c4 = threading.Thread(target=consumer, args=("c4",)) c5 = threading.Thread(target=consumer, args=("c5",)) c6 = threading.Thread(target=consumer, args=("c6",)) p.start() p2.start() c1.start() c2.start() c3.start() c4.start() c5.start() c6.start() # p.join() # que.task_done()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié)
這篇文章主要介紹了用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02python讀取.mat文件及將變量存為.mat文件的詳細(xì)介紹
這篇文章主要給大家介紹了關(guān)于python讀取.mat文件及將變量存為.mat文件的詳細(xì)介紹,?mat文件是matlab的數(shù)據(jù)存儲的標(biāo)準(zhǔn)格式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06Python隨機函數(shù)random隨機獲取數(shù)字、字符串、列表等使用詳解
這篇文章主要介紹了Python隨機函數(shù)random使用詳解包含了Python隨機數(shù)字,Python隨機字符串,Python隨機列表等,需要的朋友可以參考下2021-04-04