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 三種關係 三種關係分別指的是 消費者和消費者,生產者和生產者,生產者和消費者 其中消費者和消費者,生產者和生產者之間都屬於競爭關係,生產者和消費者之間的關係相當於是一種食物鏈之間的...