生产者消费者模型
''' 1. 什么是生产者消费者模型 生产者:代指生产数据的任务 消费者:代指处理数据的任务 该模型的工作方式: 生产生产数据传递消费者处理 实现方式: 生产者---->队列<------消费者 2. 为何要用 当程序中出现明细的两类任务,一类负责生产数据,一类负责处理数据 就可以引入生产者消费者模型来实现生产者与消费者的解耦合,平衡生产能力与消费能力,从提升效率 3. 如何用 ''' ''' import time,random from multiprocessing import Process,Queue 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() if res is None:break time.sleep(random.randint(1,3)) #模拟处理数据的时间 print('吃货[%s]吃了<%s>' %(name,res)) if __name__ == '__main__': q=Queue() # 生产者们 p1=Process(target=producer,args=('小Egon','煎饼',q)) p2=Process(target=producer,args=('中Egon','肉夹馍',q)) p3=Process(target=producer,args=('大Egon','腰子汤',q)) # 消费者们 c1=Process(target=consumer,args=('alex',q)) c2=Process(target=consumer,args=('java',q)) p1.start() p2.start() p3.start() c1.start() c2.start() p1.join() p2.join() p3.join() q.put(None) q.put(None) print('主') ''' 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() # 生产者们 p1=Process(target=producer,args=('小Egon','凉皮',q)) p2=Process(target=producer,args=('中Egon','生煎',q)) p3=Process(target=producer,args=('大Egon','胡辣汤',q)) # 消费者们 c1=Process(target=consumer,args=('tom',q)) c2=Process(target=consumer,args=('python',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('主')