Python生產者和消費者模型
生產者和消費者模型中有兩個重要的角色,生產者負責產生數據,消費者負責獲取這些數據進行接下來的操作
爲什麼要使用生產者和消費者模型?
在併發編程中,如果生產者處理數據速度很快,而消費者處理速度比較慢,那麼生產者就必須等待消費者處理完,才能繼續生產數據。同樣的道理,如果消費者的處理能力大於生產者,那麼消費者就必須等待生產者,等待生產者生產完畢,才能繼續接下的操作。爲了解決這個等待的問題,就引入了生產者與消費者模型。
使用生產者和消費者模型的三個要素:
1.生產者
2.消費者
3.隊列(Queue)
並不是一定要使用隊列,也可以使用其他的容器,但是隊列不用考慮鎖的問題
如何使用這個模型
當程序中出現明顯的兩個任務,一類負責生產,一類負責處理生產的數據時(例:爬蟲)
使用此模型有什麼好處
1.實現了生產者和消費者之間互相等待的問題
2.平衡生產者和消費者之間的關係,生產者可以一直生產,消費者可以慢慢消費,兩者不直接聯繫,而是通過隊列溝通
簡單的例子:
from queue import Queue
from threading import Thread
import time
# 創建隊列
q = Queue(10)
def producer(name):
"""生產者"""
count = 1 #計數器
while True:
q.join() #等待task_done()發送信號
q.put(count)
print(f"{name}正在生產第{count}個包子")
count+=1
def customer(name):
"""消費者"""
count = 1
while True:
baozi = q.get()
print(f"消費者-{name}正在喫第{count}個包子")
count+=1
q.task_done() #喫完後發送信號
time.sleep(1)
if __name__ == '__main__':
t1 = Thread(target=producer,args=("張大廚",))
t2 = Thread(target=customer,args=("小明",))
t1.start()
t2.start()
運行結果