Python queue队列原理与应用案例分析


Posted in Python onSeptember 27, 2019

本文实例讲述了Python queue队列原理与应用。分享给大家供大家参考,具体如下:

作用:

 解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。

 提高处理效率:FIFO = 现进先出,LIFO = 后入先出。

队列:

队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可。请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他线程处理这分数据,它实现了解耦,提高效率。队列内会有一个有顺序的容器,列表与这个容器是有区别的,列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留。当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。

参数介绍:

# 先入先出 maxsize 可设置大小,设置block=False抛异常
class queue.Queue(maxsize=0)
 # 后进先出
class queue.LifoQueue(maxsize=0)
# 存储数据时可设置优先级的队列
# 优先级设置数越小等级越高
class queue.PriorityQueue(maxsize=0)
# 放入数据
Queue.put(item, block=True, timeout=None)
# 取出数据 #没有数据将会等待
Queue.get(block=True, timeout=None)
# 如果1秒后没取到数据就退出
Queue.get(timeout = 1)
# 取数据,如果没数据抛queue.Empty异常
Queue.get_nowait()
# 查看队列大小
Queue.qsize()
# 返回True,如果空
Queue.empty() #return True if empty
# 设置队列大小
Queue.full()
# 后续调用告诉队列,任务的处理是完整的。
Queue.task_done()

生产者消费者模型:

import threading,time
import queue
# 最多存入10个
q = queue.Queue(maxsize=10)
def producer(name):
  count = 1
  while True:
      # 生产一块骨头
      q.put("骨头 %s" % count )
      print("生产了骨头",count)
      count +=1
      time.sleep(0.3)
def consumer(name):
  while True:
    print("%s 取到[%s] 并且吃了它" %(name, q.get()))
    time.sleep(1)
    # 告知这个任务执行完了
    q.task_done()
# 生成线程
p = threading.Thread(target=producer,args=("德国骨科",))
c = threading.Thread(target=consumer,args=("陈狗二",))
d = threading.Thread(target=consumer,args=("吕特黑",))
# 执行线程
p.start()
c.start()
d.start()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中正则表达式的详细教程
Apr 30 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
win与linux系统中python requests 安装
Dec 04 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
python-numpy-指数分布实例详解
Dec 07 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
python多环境切换及pyenv使用过程详解
Sep 27 #Python
python 哈希表实现简单python字典代码实例
Sep 27 #Python
python实现发送form-data数据的方法详解
Sep 27 #Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 #Python
Pycharm 字体大小调整设置的方法实现
Sep 27 #Python
python3 写一个WAV音频文件播放器的代码
Sep 27 #Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 #Python
You might like
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
Python理解递归的方法总结
2019/01/28 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
Python调用Redis的示例代码
2020/11/24 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
班会关于环保演讲稿
2013/12/29 职场文书
校长先进事迹材料
2014/02/01 职场文书
人力资源主管职责范本
2014/03/05 职场文书
大学应届生的自我评价
2014/03/06 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
考察邀请函范文
2015/01/31 职场文书
世界红十字日活动总结
2015/02/10 职场文书
董事长助理岗位职责
2015/02/11 职场文书
小学教师岗位职责
2015/04/02 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电