代碼及注釋如下
#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í)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
