生產消費者作業

2022-08-17 22:42:20 字數 1557 閱讀 2240

"""

生產者:生產/製造東西的

消費者:消費/處理東西的

該模型除了上述兩個之外還需要乙個媒介

生活中的例子做包子的將包子做好後放在蒸籠(媒介)裡面,買包子的取蒸籠裡面拿

廚師做菜做完之後用盤子裝著給你消費者端過去

生產者和消費者之間不是直接做互動的,而是借助於媒介做互動

生產者(做包子的) + 訊息佇列(蒸籠) + 消費者(吃包子的)

"""# from multiprocessing import queue, process

from multiprocessing import joinablequeue, process

import random

import time

def producer(name, food, q):

for num in range(1, 9):

print('%s 製作 %s 1籠' % (name, food))

# 模擬網路延遲

time.sleep(random.randint(1, 2))

# 將資料加入佇列

q.put(food)

def consumer(name, q):

while true:

food = q.get() # 假如沒有資料,程式就會在此處進入堵塞態

# 判斷當前是否有結束的標識

# if food is none:break

time.sleep(random.randint(1, 3))

print('%s食用了%s' % (name, food))

q.task_done() # 告訴佇列你已經從裡面取出了乙個資料並且處理完畢了

if __name__ == '__main__':

# q = queue()

q = joinablequeue()

p1 = process(target=producer, args=('大廚', '蝦餃', q))

p2 = process(target=producer, args=('大廚', '蒸餃', q))

c1 = process(target=consumer, args=('umi', q))

p1.start()

p2.start()

# 將消費者設定成守護程序

c1.daemon = true

c1.start()

p1.join()

p2.join()

# 等待生產者生產完畢之後 往佇列中新增特定的結束符號

# q.put(none) # 有多少消費者就往佇列中新增多少none,新新增的none必定在佇列的末尾

q.join() # 等待佇列中所有的資料被取完再執行往下執行**

"""joinablequeue 每當你往該佇列中存入資料的時候 內部會有乙個計數器+1

沒當你呼叫task_done的時候 計數器-1

q.join() 當計數器為0的時候 才往後執行

"""# 只要q.join執行完畢 說明消費者已經處理完資料了 消費者就沒有存在的必要了

生產消費者

producer consumer model include include define buffer size 100 緩衝區數量 define max seq 200 define n consumer 10 消費者數量 define n producer 3 生產者數量 define t ...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者消費者

using system using system.collections.generic using system.threading namespace gmservice foreach thread thread in producers q.exit console.read public...