生產者與消費者模型改進

2021-09-12 17:11:36 字數 941 閱讀 6495

from queue import queue

import time,random,threading

def xiaofei(name,q):

while true:

s=q.get()

print('%s消費了%s'%(name,s))

time.sleep(random.random())

q.task_done() #取完乙個資料向生產者傳送乙個訊號,當取完時生產者執行緒解阻塞

def shengchan(name,q):

for i in range(3):

q.put(i)

print('%s生產了%s'%(name,i))

time.sleep(random.random())

q.join() #根據生產者傳送的訊號判斷佇列中元素個數,取完時解阻塞

if __name__ == '__main__':

q = queue()

t1 = threading.thread(target=xiaofei, args=('消費者', q))

t2 = threading.thread(target=shengchan, args=('生產者', q))

t1.daemon = true #將子執行緒t1的daemon設定為ture,主線程結束不會等待這個子執行緒

print('主線程')

t1.start()

t2.start()

在上一次的模型中主線程守護子執行緒,消費者執行緒取完生產者生產的資料後一直處於阻塞狀態。主線程一直等待不能結束。現在將消費者執行緒的daemon屬性改為true,也就是主線程結束了就不用等待消費者子執行緒結束。消費者還沒有取完資料時生產者執行緒一直阻塞,而主線程還是會等待生產者執行緒的,等到消費者執行緒取完資料後告訴生產者,生產者得到訊息後去阻塞結束執行緒,主線程強行結束消費者子執行緒。

生產者與消費者模型

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

生產者與消費者模型

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

生產者與消費者模型

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