Python中的生产者消费者模型,在并发编程中使用生产者和消费者模式可以解决绝大多数并发问题,是本章的重点内容,下面咱们一块儿来看看吧。编程
生产者消费者模型多线程
在并发编程中使用生产者和消费者模式可以解决绝大多数并发问题。该模式经过平衡生产线程和消费线程的工做能力来提升程序的总体处理数据的速度。并发
什么是生产者消费者模式dom
生产者消费者模式是经过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而经过阻塞队列来进行通信,因此生产者生产完数据(作包子的)以后不用等待消费者(吃包子的)处理,直接扔给阻塞队列(盘子),消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就至关于一个缓冲区,平衡了生产者和消费者的处理能力。ide
为何要使用生产者和消费者模式线程
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,若是生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。一样的道理,若是消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题因而引入了生产者和消费者模式。code
基于队列实现生产者消费者模型队列
from multiprocessing import Process,Queueimport time,random,osdefconsumer(q): while True:ip
res=q.get() time.sleep(random.randint(1,3)) print('%s 吃 %s' %(os.getpid(),res))defproducer(q): for i in range(10): time.sleep(random.randint(1,3)) res='包子%s' %i q.put(res) print('%s 生产了 %s' %(os.getpid(),res))if __name__ == '__main__': q=Queue() #生产者们:即厨师们 p1=Process(target=producer,args=(q,)) #消费者们:即吃货们 c1=Process(target=consumer,args=(q,)) #开始 p1.start() c1.start() print('主')