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中pandas.DataFrame排除特定行方法示例
Mar 12 Python
python django事务transaction源码分析详解
Mar 17 Python
Python 常用的安装Module方式汇总
May 06 Python
PyCharm 常用快捷键和设置方法
Dec 20 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
老生常谈python中的重载
Nov 11 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python实现Appium端口检测与释放的实现
Dec 31 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
使用无限生命期Session的方法
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
浅谈Python爬虫基本套路
2019/03/25 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
python打开音乐文件的实例方法
2020/07/21 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
文科毕业生自荐书范文
2014/04/17 职场文书
会计学专业自荐信
2014/06/25 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers