美文网首页Python全栈工程师
26.1-生产者消费者模型

26.1-生产者消费者模型

作者: BeautifulSoulpy | 来源:发表于2019-10-22 15:47 被阅读0次

根本没有那条“更好的路”,只有一条路,就是你选择的那条路。关键是,你要勇敢地走上去,而且要坚持走下去!


生产者消费者模型

对于一个监控系统,需要处理很多数据,包括日志。对其中已有数据的采集、分析。
被监控对象就是数据的生产者producer,数据的处理程序就是数据的消费者consumer。

生产者和消费者速度要不匹配的问题

解决办法:—队列queue;最好消费者速度快一些,好一点;


生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。

生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。

日志生产者往往会部署好几个程序,日志产生的也很多,而消费者也会有多个程序,去提取日志分析处理。
数据的生产是不稳定的!可能会造成短时间数据的“潮涌”,需要缓冲。

消息队列处理数据的方式有两种:
1.排一队;
2.排多队;

大型系统使用消息队列往往是第三方消息中间件:RabbitMQ、RocketMQ、Kafka;
集群、
进程版本与线程版本q

生产者消费者问题是线程模型中的经典问题,该模型的应用和变种非常多,不赘述!

queue模块

queue模块提供了一个先进先出的队列Queue;

queue.Queue(maxsize=0)

创建FIFO队列,返回Queue对象。
maxsize 小于等于0,队列长度没有限制。

Queue.get(block=True, timeout=None)

从队列中移除元素并返回这个元素
block 为 阻塞,timeout为超时。
如果block为True,是阻塞,timeout为None就是一直阻塞。
如果block为True但是timeout有值,就阻塞到一定秒数抛出Empty异常。
block为False,是非阻塞,timeout将被忽略,要么成功返回一个元素,要么抛出empty异常。

相关文章

  • 26.1-生产者消费者模型

    根本没有那条“更好的路”,只有一条路,就是你选择的那条路。关键是,你要勇敢地走上去,而且要坚持走下去! 生产者消费...

  • 34.Python之生产者消费者模型

    Python之生产者消费者模型(非常重要) 生产者消费者模型模型指的是一种解决问题的套路。 生产者消费者模型中包含...

  • 生产者和消费者模型

    生产者和消费者模型 1. 什么是生产者和消费者模型 生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者...

  • 生产者消费者(一)

    生产者消费者模型: 生产者------> 缓存<-------- 消费者

  • Future

    Future 模式只是生产者-消费者模型的扩展。经典“生产者-消费者”模型中消息的生产者不关心消费者何时处理完该条...

  • python入门开发学习笔记之掌握什么是生产者消费者模型

    本节重点 熟练掌握什么是生产者消费者模型熟练掌握为什么要用生产者消费者模型熟练掌握如何实现生产者消费者模型本节时长...

  • wait/notify实现生产者消费者(6)

    生产者消费者模型 生产者消费者模型是一个典型的多线程问题,涉及生产者、消费者、产品仓库。生产者生产的产品放入仓库中...

  • 生产者消费者

    生产者/消费者模式(阻塞队列) 生产者消费者模型的实现

  • 生产者消费者模型示例

    生产者消费者模型Main provider(生产者) Consumer(消费者) Data数据 log信息

  • 生产者消费者模型Java实现

    生产者消费者模型 生产者消费者模型可以描述为:①生产者持续生产,直到仓库放满产品,则停止生产进入等待状态;仓库不满...

网友评论

    本文标题:26.1-生产者消费者模型

    本文链接:https://www.haomeiwen.com/subject/itvfvctx.html