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解释器理解Python中的字节码
Apr 01 Python
详解Python编程中time模块的使用
Nov 20 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
使用Python实现分别输出每个数组
Dec 06 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
Python list列表删除元素的4种方法
Nov 01 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并发访问实例代码
2012/09/06 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python移位运算的实现
2019/07/15 Python
使用python模拟命令行终端的示例
2019/08/13 Python
中文系师范生自荐信
2013/10/01 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
大学活动总结范文
2014/04/29 职场文书
离婚财产处理协议书
2014/09/30 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
2016春节家属慰问信
2015/03/25 职场文书
部门2015年度工作总结
2015/04/29 职场文书
感恩教育主题班会
2015/08/12 职场文书
学习经验交流会策划书
2015/11/02 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby