python中的生产者与消费者模式
来源:互联网 发布:钢雨篷荷载计算软件 编辑:程序博客网 时间:2024/06/06 05:05
Queue的说明
- 对于Queue,在多线程通信之间扮演重要的角色
- 添加数据到队列中,使用put()方法
- 从队列中取数据,使用get()方法
- 判断队列中是否还有数据,使用qsize()方法
生产者消费者模式的说明
为什么要使用生产者和消费者模式
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。
什么是生产者消费者模式
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦。
例如:
from threading import Thread
import queue
importtime
q = queue.Queue() #创建一个队列容器,用来保存生产者产生的数据
classProducer(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生产了一个数据 %s" % (self.name, msg))
time.sleep(1)
classCustomer(Thread):
"""消费者线程"""
def run(self):
while True:
if q.qsize() > 20:
for i in range(2):
msg = q.get()
print("消费者%s消费了一个数据 %s" % (self.name, msg))
time.sleep(1)
fori in range(3):
p = Producer()
p.start()
fori in range(5):
c = Customer()
c.start()
- python中的生产者与消费者模式
- Python中的生产者与消费者模式
- 生产者与消费者模式(python 版)
- Python中的生产者与消费者 实现多线程
- 消费者与生产者模式
- 消费者与生产者模式
- 消费者与生产者模式
- 生产者与消费者模式
- 生产者与消费者模式
- 生产者与消费者模式
- 生产者与消费者模式
- 生产者与消费者模式
- 生产者与消费者模式
- Python中的生产者消费者问题
- Python中的生产者消费者问题
- 消费者与生产者模式2
- 深入生产者与消费者模式
- Linux:生产者与消费者模式
- 实现一个Promise-polyfill
- NOIP 2009 提高组 复赛 trade 最优贸易
- 个人初学bootstrap并搭建后台界面代码
- 数据结构-散列
- 比较器
- python中的生产者与消费者模式
- Drying
- 网易2018校招编程题集合3
- POJ
- miscellaneous_7
- 前端面向对象
- python相关函数
- PhpBoot: 一款用于快速开发 RESTful 接口的PHP框架
- 功夫小子实践开发-游戏设置功能的实现