定義:
在併發程式設計中使用生產者和消費者模式能夠解決絕大多數併發問題。該模式通過平衡生產線程和消費執行緒的工作能力來提高程式的整體處理資料的速度。
為什麼要使用生產者和消費者模式
什麼是生產者消費者模式
生產者消費者模式是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,平衡了生產者和消費者的處理能力。
基於佇列實現生產者消費者模型
例項:主要用了joinablequeue進行佇列的訪問,但它有兩個方法乙個為task_done每執行一次就記錄一次直到佇列中沒有東西,另乙個join就是等到佇列中為空為止,實現生產者生產完等消費者取東西,直到取完就結束生產者本身的程序,而主程序則等生產者結束就結束,而消費者設為守護程序,主程序一結束,消費者也隨之結束
from multiprocessing import process, joinablequeueimport time, os
def producer(q, name):
for i in range(3):
time.sleep(1)
res = '%s%s' % (name, i)
q.put(res)
print('\033[45m 生產了 [%s]\033[0m' % (os.getpid(), res))
q.join() #等消費者取完就結束
def consumer(q):
while true:
res = q.get()
time.sleep(1.5)
print('\033[34m 吃了 [%s]\033[0m' % (os.getpid(), res))
q.task_done() #每取走乙個就記一次
if __name__ == '__main__':
q = joinablequeue()
# 生產者們:即廚師們
p1 = process(target=producer, args=(q, '包子'))
p2 = process(target=producer, args=(q, '餃子'))
p3 = process(target=producer, args=(q, '餛飩'))
# 消費者們:即吃貨們
c1 = process(target=consumer, args=(q,))
c2 = process(target=consumer, args=(q,))
c1.daemon=true # 設為守護程序,當主程序結束,消費者程序也隨之結束
c2.daemon=true # 設為守護程序,當主程序結束,消費者程序也隨之結束
p1.start()
p2.start()
p3.start()
c1.start()
c2.start()
p1.join() # 主程序等生產者結束
print('主')
python生產者與消費者模型
用該模型有個蛇好處?生產者消費者模型當中有兩大類重要的角色,乙個是生產者 負責造資料的任務 另乙個是消費者 接收造出來的資料進行進一步的操作 生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料 之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從...
Python 生產者消費者模型
生產者消費者模型 我們都知道實現生產者消費者模型的三要素 寫乙個簡單的生產者消費者模型的例子 coding utf 8 import time,threading,queue,random 佇列 先入先出 q queue.queue 生產者 def producer for i in range 1...
Python 生產者 消費者模型
生產者 消費者模型是多執行緒同步的經典案例 此模型中生產者向緩衝區push資料,消費者從緩衝區中pull資料 這個demo中緩衝區用python實現的queue來做,這個模組是執行緒安全的使我不用再為佇列增加額外的互斥鎖.此外這個demo中訊號處理的實現是這樣的 1 主線程接到乙個sigterm的訊...