1 什麼是生產者消費者模型
生產者:比喻的是程序中負責產生數據的任務
消費者:比喻的是程序中負責處理數據的任務
生產者->共享的介質(隊列)<-消費者
2 爲什麼用
實現了生產者與消費者的解耦和,生產者能夠不停地生產,消費者也能夠不停地消費
從而平衡了生產者的生產能力與消費者消費能力,提高了程序總體運行的效率
何時用?
當咱們的程序中存在明顯的兩類任務,一類負責產生數據,另一類負責處理數據
此時就應該考慮使用生產者消費者模型來提高程序的效率
from multiprocessing import JoinableQueue,Processimport timeimport osimport randomdef producer(name,food,q): for i in range(3): res='%s%s' %(food,i) time.sleep(random.randint(1,3)) # 往隊列裏丟 q.put(res) print('\033[45m%s 生產了 %s\033[0m' %(name,res)) # q.put(None)def consumer(name,q): while True: #從隊列裏取走 res=q.get() if res is None:break time.sleep(random.randint(1,3)) print('\033[46m%s 吃了 %s\033[0m' %(name,res)) q.task_done()if __name__ == '__main__': q=JoinableQueue() # 生產者們 p1=Process(target=producer,args=('egon','包子',q,)) p2=Process(target=producer,args=('楊軍','泔水',q,)) p3=Process(target=producer,args=('猴老師','翔',q,)) # 消費者們 c1=Process(target=consumer,args=('Alex',q,)) c2=Process(target=consumer,args=('wupeiqidsb',q,)) c1.daemon=True c2.daemon=True p1.start() p2.start() p3.start() c1.start() c2.start() p1.join() p2.join() p3.join() q.join() #等待隊列被取乾淨 # q.join() 結束意味着 # 主進程的代碼運行完畢--->(生產者運行完畢)+隊列中的數據也被取乾淨了->消費者沒有存在的意義 # print('主')