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中用startswith()函数判断字符串开头的教程
Apr 07 Python
python中查看变量内存地址的方法
May 05 Python
python处理图片之PIL模块简单使用方法
May 11 Python
Python自动生产表情包
Mar 17 Python
python机器学习之神经网络(三)
Dec 20 Python
python实现数据写入excel表格
Mar 25 Python
python生成密码字典的方法
Jul 06 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
在PHP中使用XML
2006/10/09 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP图片加水印实现方法
2016/05/06 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
js 函数的副作用分析
2011/08/23 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
python2与python3共存问题的解决方法
2018/09/18 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
Django的Modelforms用法简介
2019/07/27 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
求职信标题怎么写
2014/05/26 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
小学数学课题方案
2014/06/15 职场文书
2015学校图书管理员工作总结
2015/05/11 职场文书
证婚人致辞精选
2015/07/28 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS