Python 生產者 消費者模型

2022-08-28 19:27:06 字數 1761 閱讀 4116

生產者-消費者模型是多執行緒同步的經典案例

此模型中生產者向緩衝區push資料,消費者從緩衝區中pull資料

這個demo中緩衝區用python實現的queue來做,這個模組是執行緒安全的使我不用再為佇列增加額外的互斥鎖.此外這個demo中訊號處理的實現是這樣的:

1)主線程接到乙個sigterm的訊號後先通知consumer停止向緩衝區push資料並退出

2)produer將緩衝區中的資料消費完全後在退出

3)主線程退出

下面是部分**,全部**在github上面

class

consumer(threading.thread):

def__init__

(self, queue):

threading.thread.

__init__

(self)

self.queue =queue

self.do =true

defstop(self):

self.do =false

print

'change consumer.do to false

'def

run(self):

print

'create new consumer thread, id: %s

' %self.ident

while

self.do:

messages =

result =

msg = random.randint(0,100)

self.queue.put(msg)

print

'consumer thread will exit.

'class

producer(threading.thread):

def__init__

(self, queue):

threading.thread.

__init__

(self)

self.queue =queue

self.msgs =queue.queue()

self.state =state.normal

self.do =true

defstop(self):

self.do =false

self.state =state.stop

defrun(self):

while

self.do:

if self.state ==state.normal:

ifnot

self.queue.empty():

data =self.queue.get()

print

'producer get data: %s

' %data

else

:

print

'data queue is empty, sleep 5 seconds.

'time.sleep(5)

elif self.state ==state.stop:

while

notself.queue.empty():

data =self.queue.get()

print

'producer get data: %s

' %data

print

'producer thread will exit.

'

個人部落格: 

Python 生產者消費者模型

生產者消費者模型 我們都知道實現生產者消費者模型的三要素 寫乙個簡單的生產者消費者模型的例子 coding utf 8 import time,threading,queue,random 佇列 先入先出 q queue.queue 生產者 def producer for i in range 1...

生產者消費者模型

1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...

生產者消費者模型

生產者與消費者 3,2,1 三種關係 生產者與消費者 互斥,同步 消費者與消費者 互斥 生產者與生產者 互斥 條件變數 int pthread cond destroy pthread cond t cond int pthread cond init pthread cond t restrict...