python生产者消费者模型
1、什么是生产者消费者模型
生产者消费者模型指的是一种解决问题的思路
该模型中包含两类明确的角色:
1、生产者:创造数据的任务
2、消费者:处理数据的任务
2、为什么要用生产者消费者模型?
1、实现生产者与消费者任务的解耦和
2、平衡了生产者的生产力与消费者消费力
一旦程序中出现明显的两类需要并发执行的任务,一类是负责数据的,另外一类是负责处理数据的
那么就可以使用生产者消费者模型来提升执行效率
3、如何用
生产者----》队列《-------消费者
实例一:
from multiprocessing import Queue,Process
import time
#1、队列占用的是内存控制,即便是不指定队列的大小也不可能无限制地放数据
#2、队列是用来传递消息的介质,即队列内存放的是数据量较小的数据
def producer(name,food,q):
for i in range(5):
res='%s%s' %(food,i)
time.sleep(1)
print('\033[45m厨师%s 生产了%s\033[0m' %(name,res))
q.put(res)
def consumer(name,q):
while True:
res=q.get()
if res is None:break
time.sleep(2)
print('\033[47m吃货%s 吃了%s\033[0m' %(name,res))
if __name__ == '__main__':
q = Queue()
#生产者们
p1=Process(target=producer,args=('egon','泔水',q))
p2=Process(target=producer,args=('刘清政','臭豆腐',q))
p3=Process(target=producer,args=('崔昆强','翔',q))
#消费者们
c1 = Process(target=consumer, args=('alex', q))
c2 = Process(target=consumer, args=('李杰', q))
p1.start()
p2.start()
p3.start()
c1.start()
c2.start()
p1.join()
p2.join()
p3.join()
q.put(None)
q.put(None)
print('主')
# 应该在生产者们生产完毕后,往队列的末尾放结束信号None
案例二:
from multiprocessing import JoinableQueue,Process
import time
def producer(name,food,q):
for i in range(5):
res='%s%s' %(food,i)
time.sleep(1)
print('\033[45m厨师%s 生产了%s\033[0m' %(name,res))
q.put(res)
def consumer(name,q):
while True:
res=q.get()
time.sleep(2)
print('\033[47m吃货%s 吃了%s\033[0m' %(name,res))
q.task_done()
if __name__ == '__main__':
q = JoinableQueue()
#生产者们
p1=Process(target=producer,args=('egon','泔水',q))
p2=Process(target=producer,args=('刘清政','臭豆腐',q))
p3=Process(target=producer,args=('崔昆强','翔',q))
#消费者们
c1 = Process(target=consumer, args=('alex', q))
c2 = Process(target=consumer, args=('李杰', 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() # 1、证明生产者都已经完全生产完毕 2、队列为空,也就是消费者也消费完毕
# print('主')

浙公网安备 33010602011771号