python queue 生产者 消费者_【python】-- 队列(Queue)、生产者消费者模型

队列(Queue)

在多个线程之间安全的交换数据信息,队列在多线程编程中特别有用

队列的好处:

提高双方的效率,你只需要把数据放到队列中,中间去干别的事情。

完成了程序的解耦性,两者关系依赖性没有不大。

一、队列的类型:

1、lass queue.Queue(maxsize=0)

先进先出,后进后出

2、class queue.LifoQueue(maxsize=0)

是先进后出,后进新出规则,last in fisrt out

3、class queue.PriorityQueue(maxsize=0)

根据优先级来取数据。存放数据的格式  : Queue.put((priority_number,data)),priority_number越小,优先级越高,data代表存入的值

注:maxsize代表这个队列最大能够put的长度

二、队列(Queue)的内置方法

生产者消费者模型

并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。

1、为什么要使用生产者和消费者模式

在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。

2、什么是生产者消费者模式

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

3、生成者消费者模型例子

3.1、生产者生产完毕,消费者再消费例子:

3.2 边生产边消费的模型例子

3.3、流程图

图解:

生产者生产,消费者消费。

消费者每消费一次,都要去执行以下task_done()方法,来告诉消费者已经消费成功,相当于吃完饭,消费者应该给钱了。

消费者每消费一次,则队列中计数器会做减1操作。

当队列中的计数器为0的时候,则生产者不阻塞,继续执行,不为0的时候,则阻塞,直到消费者消费完毕为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于.NET技术前途问题的讨论

我去年曾经在论坛发起过关于.NET技术前途问题这个话题的讨论,也引起了很多同行和朋友的回复,时间过去大半年,自己也有了一些新的理解。本文的目的就是将其中一些精彩的观点整理出来并谈谈自己的观点。 引子 我们都知道微软.NET技术更新速度快…

用枚举enum实现单例

【README】 1,effectivejava 讲到使用 枚举类实现单例的例子,非常好用;2,好处如下: 不用定义私有构造器;不用定义获取单例的方法,如 getInstance() ;通过 枚举类.INSTANCE() 就可以…

前端面试常考系列一

转载自 前端面试常考系列一 一、简述HTML5的优点和缺点? 优点: 1、网络标准统一、HTML5是由W3C推出的。 2、多设备、跨平台 ,移植性强。 3、自适应网页设计。 4、即时更新。 5、新增了几个标签,有助于开发人员定义重要的内容&…

基于轻量型Web服务器Raspkate的RESTful API的实现

在上一篇文章《Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器》中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API。 模块 首先让我们了解一下“模块”的概念。Raspkate的…

python股票自动买卖视频教程_十分钟学会用Python交易股票

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门、创建自己的量化策略代码 。难易度:入门级.从一下几点说起;1 确定框架:[单股票均线策略] 的主要策略…

前端面试常考系列二

转载自 前端面试常考系列二 一、外部引用CSS有几种方式,有何区别 外部引用CSS的方式有两种分别是link和import。 区别如下: 1、link是XHTML标签,除了加载CSS外,还可以定义RSS等其它事务;import属于CSS范畴,…

3分钟看完Build2016 Day 1 Keynote

Build 2016 Day 1 Keynote 直播结束,M姐不得不说,没看直播的真心错过了一大波黑科技和充值我软信仰的大好时机,不过别后悔,M姐精选了干货,一次性让你补充信仰。没看的真心会被甩开八条街!! 言归…

js动态给按钮赋id_如何给SHOPIFY店铺添加“立即购买”动态结账按钮

动态结账按钮会根据店铺后台所支持的第三方快速结账付款方式和顾客设备浏览器的记录动态展示快速结帐按钮,比如PayPal Express Checkout、Apple Pay等。当然如果浏览器没有记录或者店铺后台没有支持的快速结帐付款方式,按钮则会显示为“buy it now”。Dy…

java序列化与深度拷贝

【README】 1, 为啥要序列化或序列化的意义?2,系统间调用的报文格式,大多数是Json字符串(或字节数组);接收方接收json;3,但当系统调用如RMI,客户端请求服务器…

微软Build 2016开发者大会--兑换承诺

微软的Build开发者大会已经成为它向我们宣布其在未来一年里的战略方向的一个最大平台。不像苹果的发布大会,微软之所以要召开这个会议并不是要发布什么产品,而是像众多业内人士所分析的那样,希望通过介绍公司的努力来说服它最重要的听众——开…

前端面试常考系列三

转载自 前端面试常考系列三 一、简述一下src与href的区别 href 表示超文本引用,在 link和a 等元素上使用。src 表示来源地址,指向外部资源所在位置,在 img、script、iframe 等元素上。src 的内容,是页面的一部分,是引入…

java内部类小结

【README】 1,本文总结了java4种内部类,包括 成员内部类:在外部类内部定义的非静态类;成员内部类不能独立存在,如 UML中类间的组合关联关系;静态内部类:在外部类内部定义的静态类;…

python内置模块有哪些_python中那些小众但有用的内置模块

今天带来的是python里一些小众但是却比较实用的python库,一起来看看吧!pprint:更清晰的打印pprint 是 pretty printer 的缩写,用来打印 Python 数据结构,与 print 相比,它打印出来的结构更加整齐&#xff0…

微软想让你跟机器人说句话就把事办了

也别猜错,微软可没有像 Google 一样打算让四只脚能跑 60 迈和两只脚能穿行森林的机器人大军占领你的家。他们家的机器人不是 Robot,而叫 Bot,可能是 chatbot 的简称,也就是聊天机器人。 具体来说,微软在自然语言处理的…

转:Spring Boot 获取 HttpServletRequest 的方法

转自: Spring Boot 获取 HttpServletRequest 的方法 - 简书本文介绍 Spring Boot 2 获取 HttpServletRequest 的方法。 目录 概述 方法Controller 方法参数属性自动注入手动方法调用借助 Mo...https://www.jianshu.com/p/b7a7d66c4ef2 本文介绍 Spring Boot 2 获取…

前端面试常考系列四

转载自 前端面试常考系列四 一、CSS盒子模型有哪些用处 css中的盒子模型是为了理解divcss模型的定位功能,它利用盒子模型这样的布局方式代替了传统的表格布局方式。盒子模型是在学习divcss布局方式中必须要学习的一个模型,通过这个模型可以明白网页中di…

python线性加权模型_局部加权之线性回归(1) - Python实现

1 #局部加权线性回归2 #交叉验证计算泛化误差最小点345 importnumpy6 from matplotlib importpyplot as plt789 #待拟合不含噪声之目标函数10 deforiFunc(x):11 y numpy.exp(-x) * numpy.sin(10*x)12 returny13 #待拟合包含噪声之目标函数14 def traFunc(x, sigma0.03):15 y …

3分钟看完 Day2 Keynote

hey~ M姐又给大家带来了满满惊喜的 Build2016 Day 2 Keynote 干货汇总了。 如果你连昨天的都还不知道,那真心就 out 了。如果说信仰在昨天充值爆棚,今天就要充值信仰到掀翻房顶的节奏了!!! 红衣主教今天妥妥变身成为新…

latex 数学公式_技能分享——LaTeX篇I

公众号文章系列二——“小袁技能分享”上线啦,第一篇推文我们聊一聊LaTeX(音译 “拉泰赫”)Question 1什么是LaTeX?要解释LaTeX是什么,我们先要了解另外一个事物:TeX。1968年,美国著名计算机科学家、现代计算机科学的先…

转:springboot servlet使用配置

转自: springboot servlet使用配置_奔跑的蜗牛的博客-CSDN博客在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。 一、代码注册通过ServletRegistrationBean 获得控制。 也…