python设计模式-生产者与消费者模式
2018-03-03 17:41
465 查看
生产者与消费者模式
(一)什么是生产者消费者模式
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦。
(二)为什么要使用生产者消费者模式
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。(三)python实现
# -*- coding: utf-8 -*- __author__ = 'loco_python' from threading import Thread import Queue import time # 创建一个队列,保存生产数据 q = Queue.Queue() class Producer(Thread): """用类实现生产者多线程的写法""" def run(self): count = 0 while True: if q.qsize() < 50: for i in range(3): count += 1 msg = "产品 %d" % count q.put(msg) print '生产了%s' % msg time.sleep(1) class Customer(Thread): """用类实现消费者多线程的写法""" def run(self): while True: if q.qsize() > 20: for i in range(2): msg = q.get() print "消费了%s" % msg time.sleep(1) # 每秒生产3条数据,生产了51条数据阻塞 p = Producer() p.start() c = Customer() c.start()
相关文章推荐
- 架构设计:生产者/消费者模式[2]:队列缓冲区
- Java多线程之并发协作生产者消费者设计模式
- 架构设计:生产者/消费者模式 第3页:队列缓冲区
- 架构设计:生产者/消费者模式[3]:环形缓冲区
- 架构设计:生产者/消费者模式[4]:双缓冲区
- 架构设计:生产者/消费者模式[3]:环形缓冲区
- 24 API-多线程(多线程(多线程JDK5Lock锁,生产者消费者等待唤醒机制,定时器),设计模式(设计原则,设计模式(简单工程,工厂方法,单例模式)
- 【设计模式】java生产者和消费者的代码实例
- 架构设计:生产者/消费者模式[3]:环形缓冲区
- Python3-线程应用队列(生产者与消费者模式--多生产者VS多消费者)
- python进阶:Python进程、线程、队列、生产者/消费者模式、协程
- 架构设计:生产者/消费者模式 第5页:环形缓冲区
- 架构设计:生产者/消费者模式[4]:双缓冲区
- Java多线程之并发协作生产者消费者设计模式
- Java多线程设计(四)生产者/消费者模式
- 架构设计:生产者/消费者模式 第4页:注意事项
- 架构设计:生产者/消费者模式 第4页:注意事项
- 架构设计:生产者/消费者模式
- python中的生产者与消费者模式
- 架构设计:生产者/消费者模式[2]:队列缓冲区