消费者与生产者模式

#定义
#在并发编程中使用生产者和消费都模式能够解决绝大多数并发问题。
#该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
#某些模块负责生产数据,这些数据由其他模块来负责处理(此处的模块可能是:函数、线程、进程等).
#产生数据的模块称为生产者,而处理数据的模块称为消费者

#优点
#1.解耦耦合
#2.并发
#3.闲忙不均

#案例
#两个厨师对四个顾客
#厨师做包子 和 顾客吃包子问题。
#当生产的慢,消费的快的时候,get()会发生阻塞,等待
#当生产的忙,消费的快的时候,get_nowait()会发生queue.Empty error
#当生产的太快,消费的很慢的时候,队列会很快放满,生产过剩

import threading,queue,time,random

q=queue.Queue(10)
count=1
#生产者
def producer(name):
global count
while True:
if mutex.acquire():
q.put(‘包子%d’%count)
print(’[%s]生产了包子%d’%(name,count))
count+=1
time.sleep(random.random()*5)
mutex.release()
#消费者
def consumer(name):
count=1
while True:
print(’[%s]取到了[%s]包子并且吃了它’%(name,q.get()))#get_nowait()不会阻塞等待
time.sleep(random.random()*5)

if name==‘main’:
mutex=threading.Lock()
p1=threading.Thread(target=producer,args=(‘刘大厨’,))
p2 = threading.Thread(target=producer, args=(‘张大厨’,))
con_A=threading.Thread(target=consumer,args=(‘A’,))
con_B = threading.Thread(target=consumer, args=(‘B’,))
con_C = threading.Thread(target=consumer, args=(‘C’,))
con_D = threading.Thread(target=consumer, args=(‘D’,))
p1.start()
p2.start()
con_A.start()
con_B.start()
con_C.start()
con_D.start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值