Python生產者和消費者模式

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()

運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章