生產者與消費者模型

2021-10-02 19:23:11 字數 2324 閱讀 5145

生產者與消費者是什麼模型

生產者和消費者彼此之間不直接通訊,而是通過佇列來進行通訊,生產者生產完的資料不用等待消費者處理,直接放到佇列中,消費者不找消費要資料,而是直接從佇列中取,佇列就相當於乙個緩衝區,平衡生產者和消費者的處理能力。

模型的三要素

1.生產者

2.消費者

3.佇列(緩衝區)

通過**來實現一下生產者消費者模型

from queue import queue

import threading

import time

#建立佇列

q=queue(10)

# 定義乙個生產者

defproducer

(name)

:#生產計數

count=

1while

true

: q.join(

) q.put(count)

print

("生產者%s正在生產第%d個產品"

%(name,count)

) count+=

1 time.sleep(1)

#定義乙個消費者

defcustomer

(name)

: count=

1while

true

: hao_zi=q.get(

)print

("消費者%s正在消耗第%d個商品"

%(name,hao_zi)

) count+=

1 q.task_done(

)if __name__ ==

'__main__'

: t1=threading.thread(target=producer,args=

("a",)

) t2=threading.thread(target=customer,args=

("a",)

) t1.start(

) t2.start(

)

結果:

我們加上time.sleep()這樣可以清晰的看到生產者生產乙個通過put()往佇列中放乙個,消費者消費乙個通過get()取出乙個 ,噹噹生產者生產完,消費者通過get()取空之後,就一直在原地等待。

from queue import queue

import threading

import time

#建立佇列

q=queue(10)

# 定義乙個生產者

defproducer

(name)

:#生產計數

count=

1while

true

: q.join(

) q.put(count)

print

("生產者%s正在生產第%d個產品"

%(name,count)

) count+=

1#定義乙個消費者

defcustomer

(name)

: count=

1while

true

: hao_zi=q.get(

)print

("消費者%s正在消耗第%d個商品"

%(name,hao_zi)

) count+=

1 q.task_done(

) time.sleep(1)

if __name__ ==

'__main__'

: t1=threading.thread(target=producer,args=

("a",)

) t2=threading.thread(target=customer,args=

("a",)

) t1.start(

) t2.start(

)

結果:

當生產者生產完通過put()放在佇列中就等著消費者通過get()取出

總結:生產者與消費者模型通過佇列平衡生產力與消費力,就是生產者一直不停的生產,消費者可以不停的消費,生產者與消費者不直接溝通。

生產者與消費者模型

先介紹幾個函式 生產消費者模型 二者共享資料value,這裡,生產者是producter,消費者是consumer。生產者負責放物品到value中,消費者使用wait 等待生產者的通知。當得到通知後,消費者取出物品,並且用notify 通知生產者,可以再放下一批物品。例項 package cn.ed...

生產者與消費者模型

如圖 一共有三種關係 生產者與生產者的互斥關係,消費者與消費者的互斥關係,生產者與消費者的互斥且同步關係。兩種角色 生產者 執行緒 與消費者 執行緒 乙個交易場所 倉庫 一段記憶體空間,且可存可取 二 基於單向鍊錶的生產者消費者模型 1 我們這裡用乙個單鏈表當做那段共享記憶體,簡單實現生產者消費者模...

生產者與消費者模型

生產者 消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品,模型圖如下所示 1 三種關係 三種關係分別指的是 消費者和消費者,生產者和生產者,生產者和消費者 其中消費者和消費者,生產者和生產者之間都屬於競爭關係,生產者和消費者之間的關係相當於是一種食物鏈之間的...