day28 生產者和消費者模型

2021-09-29 15:35:15 字數 2914 閱讀 1257

生產者和消費者模型

優化生產者和消費者模型 [生產者生產多少,對應的就消費多少]

子程序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 生產者 消費者問題

在多執行緒程式中,執行緒之間通常存在分工。在一種常見模式中,一些執行緒是生產者,一些是消費者。需要強制執行幾個同步約束才能使此系統正常工作 在緩衝區中新增或刪除專案時,緩衝區處於不一致狀態。因此,執行緒必須具有對緩衝區的獨佔訪問許可權。如果消費者執行緒在緩衝區為空時到達,則會阻塞,直到生產者新增新專...