python程序 线程队列queue使用方法解析


Posted in Python onSeptember 23, 2019

一、线程队列

queue队列:使用方法同进程的Queue一样

如果必须在多个线程之间安全地交换信息时,队列在线程编程中尤其有用。

重要:

q.put() :往队列里面放值,当参数block=Ture的时候,timeout参数将会有作用,当队列已经满了的时候,在往里面放值时,block为True程序将会等待timeout的时间,过了时间程序会报错,block如果为Flase时,程序不会等待直接报错

q.get() :从队列里面取值,当参数block=Ture的时候,timeout参数将会有作用,当队列已经空了的时候,在从里面取值时,block为True程序将会等待timeout的时间,过了时间程序会报错,block如果为Flase时,程序不会等待直接报错

q.task_done() :使用者使用此方法发出信号,表示q.get()返回的项目已经被处理。如果调用此方法的次数大于从队列中删除的项目数量,将引发ValueError异常。

q.join() :生产者将使用此方法进行阻塞,直到队列中所有项目均被处理。阻塞将持续到为队列中的每个项目均调用q.task_done()方法为止。

二、线程队列的取值方式

2.1 先进先出

class queue.Queue(maxsize=0)

q = queue.Queue() :不加参数代表队列可以无限的放数据

q = queue.Queue() #不加参数代表队列可以无限的放数据
q.put('Cecilia陈')
q.put('xichen')
print(q.get())
print(q.get())
'''
结果:
Cecilia陈
xichen
'''

2.2 后进先出

class queue.LifoQueue(maxsize=0)

q = Lifo.Queue() :不加参数代表队列可以无限的放数据

q = queue.LifoQueue() #不加参数代表队列可以无线的放数据
q.put('Cecilia陈')
q.put('xichen')

print(q.get())
print(q.get())
'''
结果:
xichen
Cecilia陈
'''

三、队列存数据时可以设置优先级

class queue.priorityQueue(maxsize=0)

q = queue.priorityQueue() :不加参数代表队列可以无限的放数据

3.1 优先级队列

# 3.优先级队列
q = queue.PriorityQueue() #不加参数代表队列可以无线的放数据
#put进入一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较),数字越小优先级越高
q.put((2,'Cecilia陈'))
q.put((1,'xichen'))
q.put((5,'xuchen'))

print(q.get())
print(q.get())
print(q.get())
'''
# 结果(数字越小优先级越高,优先级高的优先出队):
结果:
(1, 'xichen')
(2, 'Cecilia陈')
(5, 'xuchen')
'''

3.2 方法说明

maxsize是一个整数,它设置可以放置在队列中的项数的上限。一旦达到此大小,插入将阻塞,直到使用队列项。如果maxsize小于或等于零,则队列大小为无穷大。

p.put() :放值的时候,放的是一个元组()

exception queue.Empty :异常队列。空:当对空的队列对象调用非阻塞 get() 或 get_nowait() 时引发异常,也就是说队列为空的时候,再取值就会报错

exception queue.Full :异常队列。Full:当对已满的队列对象调用非阻塞put() 或 put_nowait() 时引发异常。也就是说当队列已满的时候,再往里面当值的时候将会报错

Queue.qsize () :

empty() :如果为空,返回True

Queue.full() :如果已满,返回True

put_nowait(item) :等同于put(item, False)。

get_nowait() :等同于get(False)。

提供了两种方法来支持跟踪已加入队列的任务是否已被守护进程使用者线程完全处理:

task_done() :表示以前加入队列的任务已经完成。由队列使用者线程使用。对于用于获取任务的每个get(),后续对task_done()的调用告诉队列任务上的处理已经完成。如果join(当前处于阻塞状态,那么在处理完所有项之后,它将继续运行(这意味着对于已经放入队列()的每个项,都收到了task_done()调用)。

如果调用次数超过放置在队列中的项的次数,则引发ValueError。

Queue.join() :块直到队列被消费完毕。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
Python使用Scrapy爬取妹子图
May 28 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
python实现简单坦克大战
Mar 27 Python
如何在django中运行scrapy框架
Apr 22 Python
Python 中由 yield 实现异步操作
May 04 Python
Python如何实现远程方法调用
Aug 07 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
用Python将GIF动图分解成多张静态图片
Jun 11 Python
python程序 创建多线程过程详解
Sep 23 #Python
详解python播放音频的三种方法
Sep 23 #Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 #Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 #Python
Python3 pandas 操作列表实例详解
Sep 23 #Python
详解基于python-django框架的支付宝支付案例
Sep 23 #Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 #Python
You might like
php cookie的操作实现代码(登录)
2010/12/29 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
jquery等待效果示例
2014/05/01 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
Python学习资料
2007/02/08 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
python学习必备知识汇总
2017/09/08 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python+OpenCV实现图像拼接
2020/03/05 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
.net工程师笔试题
2012/06/09 面试题
建筑公司文秘岗位职责
2013/11/29 职场文书
优质服务口号
2014/06/11 职场文书
刑事撤诉申请书
2015/05/18 职场文书
关于幸福的感言
2015/08/03 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫