生產者與消費者是什麼模型
生產者和消費者彼此之間不直接通訊,而是通過佇列來進行通訊,生產者生產完的資料不用等待消費者處理,直接放到佇列中,消費者不找消費要資料,而是直接從佇列中取,佇列就相當於乙個緩衝區,平衡生產者和消費者的處理能力。
模型的三要素
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 三種關係 三種關係分別指的是 消費者和消費者,生產者和生產者,生產者和消費者 其中消費者和消費者,生產者和生產者之間都屬於競爭關係,生產者和消費者之間的關係相當於是一種食物鏈之間的...