生產者消費者模型:
我們都知道實現生產者消費者模型的三要素:
寫乙個簡單的生產者消費者模型的例子:
# -*- coding:utf-8 -*-
import time, threading, queue, random
# 佇列 (先入先出)
q = queue.queue()
# 生產者
def producer():
for i in range(1, 10):
time.sleep(random.random())
gold = "金幣%d" % i
q.put(gold)
print("[%s]已生產 --> %s" % (time.ctime(), gold))
print("生產完成")
# 消費者
def consumer():
for i in range(1, 10):
time.sleep(random.random() * 3)
gold = q.get()
print("[%s]已使用 --> %s" % (time.strftime("%y-%m-%d %h-%m-%s"), gold))
print('消費完畢')
if __name__ == '__main__':
t1 = threading.thread(target=producer, name='producer')
t2 = threading.thread(target=consumer, name='consumer')
t1.start()
t2.start()
t1.join()
t2.join()
大致的執行效果就是如此:
[tue feb 12 11:43:39 2019]已生產 --> 金幣1
[tue feb 12 11:43:40 2019]已生產 --> 金幣2
[2019-02-12 11-43-40]已使用 --> 金幣1
[tue feb 12 11:43:40 2019]已生產 --> 金幣3
[tue feb 12 11:43:40 2019]已生產 --> 金幣4
[2019-02-12 11-43-40]已使用 --> 金幣2
[tue feb 12 11:43:40 2019]已生產 --> 金幣5
[tue feb 12 11:43:41 2019]已生產 --> 金幣6
[tue feb 12 11:43:42 2019]已生產 --> 金幣7
[2019-02-12 11-43-42]已使用 --> 金幣3
[tue feb 12 11:43:42 2019]已生產 --> 金幣8
[tue feb 12 11:43:43 2019]已生產 --> 金幣9
生產完成
[2019-02-12 11-43-43]已使用 --> 金幣4
[2019-02-12 11-43-45]已使用 --> 金幣5
[2019-02-12 11-43-46]已使用 --> 金幣6
[2019-02-12 11-43-46]已使用 --> 金幣7
[2019-02-12 11-43-48]已使用 --> 金幣8
[2019-02-12 11-43-48]已使用 --> 金幣9
消費完畢
Python 生產者 消費者模型
生產者 消費者模型是多執行緒同步的經典案例 此模型中生產者向緩衝區push資料,消費者從緩衝區中pull資料 這個demo中緩衝區用python實現的queue來做,這個模組是執行緒安全的使我不用再為佇列增加額外的互斥鎖.此外這個demo中訊號處理的實現是這樣的 1 主線程接到乙個sigterm的訊...
生產者消費者模型
1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...
生產者消費者模型
生產者與消費者 3,2,1 三種關係 生產者與消費者 互斥,同步 消費者與消費者 互斥 生產者與生產者 互斥 條件變數 int pthread cond destroy pthread cond t cond int pthread cond init pthread cond t restrict...