生產者和消費者模型
優化生產者和消費者模型 [生產者生產多少,對應的就消費多少]
子程序1
:消費者模型
1.迴圈(1
)消費食物(food=q.get())
(2)判斷食物是none
,break(3
)隨機延時0.1-1秒
(4)列印 xx吃了乙個xx
子程序2
:生產者模型
1.迴圈遍歷(1
)隨機延時0.1-1秒
(2)列印 xx生產了xx(3
)儲存生產 用q.put(
)主程序:
1.建立消費者
2.建立生產者
注:在生產所有資料之後,在對列的最後塞進去乙個none
,用來表達以生產完所有資料
from multiprocessing import process,queue
import time,random
消費者模型
def
consumer
(q,name)
:while
true
: food = q.get(
)if food is
none
:break
time.sleep(random.uniform(
0.1,1)
)print
("%s 吃了乙個%s"
%(name,food)
)
#生產者模型
def
producer
(q,name,food)
:for i in
range(5
):time.sleep(random.uniform(
0.1,1)
)print
("%s 生產了 %s%s"
%(name,food,i)
) q.put(food+
str(i)
)
if __name__ ==
"__main__"
: q = queue(
)# 建立生產者
p1 = process(target=producer,args=
(q,"周永玲"
,"便便"))
p1.start(
)# 建立生產者2號
p2 = process(target=producer,args=
(q,"常遠"
,"茶葉"))
p2.start(
)# 建立消費者
c1 = process(target=consumer,args=
(q,"張龍"))
c1.start(
)# 建立消費者2號
c2 = process(target=consumer,args=
(q,"林銀展"))
c2.start()
p1.join(
) p2.join(
)# 在生產完所有資料之後,在佇列的最後塞進去乙個none,用來表達已經生產完所有資料;
q.put(
none
)# 便便0 便便1 便便2 便便3 便便4 none
q.put(
none
)# 便便0 便便1 便便2 便便3 便便4 茶葉1 茶葉2 茶葉3 茶葉4 none none
print
("主程式執行結束 ... "
)
擴充套件
from multiprocessing import process,joinablequeue
import time,random
# 消費者模型
defconsumer
(q,name)
:while
true
: food = q.get(
) time.sleep(random.uniform(
0.1,1)
)print
("%s 吃了乙個%s"
%(name,food)
) q.task_done(
)# 生產者模型
defproducer
(q,name,food)
:for i in
range(5
):time.sleep(random.uniform(
0.1,1)
)print
("%s 生產了 %s%s"
%(name,food,i)
) q.put(food+
str(i)
)if __name__ ==
"__main__"
:# 建立佇列
jq = joinablequeue(
)# 消費者程序
c1 = process(target=consumer,args=
(jq,
"張曉東"))
c1.daemon =
true
c1.start(
)# 生產者程序
p1 = process(target=producer,args=
(jq,
"黃樂錫"
,"大茄子"))
p1.start(
)# 等待生產者把所有資料放到佇列中;
p1.join(
)# 直到所有資料被消費完畢之後,放行;
jq.join(
)print
("主程序執行結束 ... "
)
26 生產者消費者模型
一 ipc 空間復用 中記憶體隔離開了多個程序直接不能直接互動 ipc指的就是程序間通訊 幾種方式 1 建立乙個共享檔案 缺點 效率較低 優點 理論上交換的資料量可以非常大 適用於 互動不頻繁,且資料量較大的情況 2 共享記憶體 缺點 資料量不大 優點 效率高 適用於 互動頻繁,但是資料量小 3 管...
5 12 生產者和消費者
一 生產者和消費者之間的關係 1 生產者將生產出來的資訊不斷存入乙個區域內,消費者將資訊從該區域內不斷讀取出來 生產者錄入資訊 消費者讀取資訊 例 電影票 public class movie public void setname string name public string getinfo...
6 1 生產者 消費者問題
在多執行緒程式中,執行緒之間通常存在分工。在一種常見模式中,一些執行緒是生產者,一些是消費者。需要強制執行幾個同步約束才能使此系統正常工作 在緩衝區中新增或刪除專案時,緩衝區處於不一致狀態。因此,執行緒必須具有對緩衝區的獨佔訪問許可權。如果消費者執行緒在緩衝區為空時到達,則會阻塞,直到生產者新增新專...