Python 生產者消費者模型

2021-09-10 17:45:58 字數 1712 閱讀 2807

生產者消費者模型:

我們都知道實現生產者消費者模型的三要素:

寫乙個簡單的生產者消費者模型的例子:

# -*- 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...