生产者消费者模型
Posted zhouhao123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者消费者模型相关的知识,希望对你有一定的参考价值。
生产者消费者模型
1. 什么是生产者消费者模型
生产者:代指生产数据的任务
消费者:代指处理数据的任务
该模型的工作方式:
生产生产数据传递消费者处理
实现方式:
生产者---->队列<------消费者
2. 为何要用
当程序中出现明细的两类任务,一类负责生产数据,一类负责处理数据
就可以引入生产者消费者模型来实现生产者与消费者的解耦合,平衡生产能力与消费能力,从提升效率
import time,random from multiprocessing import Process,JoinableQueue def producer(name,food,q): for i in range(3): res=‘%s%s‘ %(food,i) time.sleep(random.randint(1,3)) #模拟生产数据的时间 q.put(res) print(‘厨师[%s]生产了<%s>‘ %(name,res)) def consumer(name,q): while True: res=q.get() time.sleep(random.randint(1,3)) #模拟处理数据的时间 print(‘吃货[%s]吃了<%s>‘ %(name,res)) q.task_done() #发信号,消费者每次取走一个,就减去一个 if __name__ == ‘__main__‘: q=JoinableQueue() #可以执行q.join() # 生产者们 p1=Process(target=producer,args=(‘a‘,‘泔水‘,q)) p2=Process(target=producer,args=(‘b‘,‘包子‘,q)) p3=Process(target=producer,args=(‘c‘,‘腰子汤‘,q)) # 消费者们 c1=Process(target=consumer,args=(‘d‘,q)) c2=Process(target=consumer,args=(‘e‘,q)) c1.daemon=True c2.daemon=True p1.start() p2.start() p3.start() c1.start() c2.start() #确保数据精准,等生产者都生产完 p1.join() p2.join() p3.join() q.join() # 主进程等q结束,即q内数据被取干净了 print(‘主‘) #主一出现,说明生产者完了,消费者也完了 结果: 厨师[a]生产了<泔水0> 厨师[a]生产了<泔水1> 吃货[e]吃了<泔水0> 厨师[c]生产了<腰子汤0> 吃货[d]吃了<泔水1> 厨师[a]生产了<泔水2> 厨师[b]生产了<包子0> 吃货[d]吃了<泔水2> 厨师[b]生产了<包子1> 厨师[c]生产了<腰子汤1> 厨师[b]生产了<包子2> 吃货[e]吃了<腰子汤0> 吃货[d]吃了<包子0> 吃货[e]吃了<包子1> 吃货[e]吃了<包子2> 厨师[c]生产了<腰子汤2> 吃货[d]吃了<腰子汤1> 吃货[e]吃了<腰子汤2> 主
以上是关于生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章