併發編程 之 生產者消費者模型

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('主')
相關文章
相關標籤/搜索