生產者-消費者模型是多執行緒同步的經典案例
此模型中生產者向緩衝區push資料,消費者從緩衝區中pull資料
這個demo中緩衝區用python實現的queue來做,這個模組是執行緒安全的使我不用再為佇列增加額外的互斥鎖.此外這個demo中訊號處理的實現是這樣的:
1)主線程接到乙個sigterm的訊號後先通知consumer停止向緩衝區push資料並退出
2)produer將緩衝區中的資料消費完全後在退出
3)主線程退出
下面是部分**,全部**在github上面
classconsumer(threading.thread):
def__init__
(self, queue):
threading.thread.
__init__
(self)
self.queue =queue
self.do =true
defstop(self):
self.do =false
'change consumer.do to false
'def
run(self):
'create new consumer thread, id: %s
' %self.ident
while
self.do:
messages =
result =
msg = random.randint(0,100)
self.queue.put(msg)
'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()
'producer get data: %s
' %data
else
:
'data queue is empty, sleep 5 seconds.
'time.sleep(5)
elif self.state ==state.stop:
while
notself.queue.empty():
data =self.queue.get()
'producer get data: %s
' %data
'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...