Python中的生產者消費者模型,在併發編程中使用生產者和消費者模式可以解決絕大多數併發問題,是本章的重點內容,下面咱們一塊兒來看看吧。編程
生產者消費者模型多線程
在併發編程中使用生產者和消費者模式可以解決絕大多數併發問題。該模式經過平衡生產線程和消費線程的工做能力來提升程序的總體處理數據的速度。併發
什麼是生產者消費者模式dom
生產者消費者模式是經過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通信,而經過阻塞隊列來進行通信,因此生產者生產完數據(作包子的)以後不用等待消費者(吃包子的)處理,直接扔給阻塞隊列(盤子),消費者不找生產者要數據,而是直接從阻塞隊列裏取,阻塞隊列就至關於一個緩衝區,平衡了生產者和消費者的處理能力。ide
爲何要使用生產者和消費者模式線程
在線程世界裏,生產者就是生產數據的線程,消費者就是消費數據的線程。在多線程開發當中,若是生產者處理速度很快,而消費者處理速度很慢,那麼生產者就必須等待消費者處理完,才能繼續生產數據。一樣的道理,若是消費者的處理能力大於生產者,那麼消費者就必須等待生產者。爲了解決這個問題因而引入了生產者和消費者模式。code
基於隊列實現生產者消費者模型隊列
from multiprocessing import Process,Queueimport time,random,osdefconsumer(q): while True:ip
res=q.get() time.sleep(random.randint(1,3)) print('%s 吃 %s' %(os.getpid(),res))defproducer(q): for i in range(10): time.sleep(random.randint(1,3)) res='包子%s' %i q.put(res) print('%s 生產了 %s' %(os.getpid(),res))if __name__ == '__main__': q=Queue() #生產者們:即廚師們 p1=Process(target=producer,args=(q,)) #消費者們:即吃貨們 c1=Process(target=consumer,args=(q,)) #開始 p1.start() c1.start() print('主')