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处理json数据中的中文
Mar 06 Python
Python实现的几个常用排序算法实例
Jun 16 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
python实现126邮箱发送邮件
May 20 Python
python解释器安装教程的方法步骤
Jul 02 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
Python self用法详解
Nov 28 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
Pygame Draw绘图函数的具体使用
Nov 17 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学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
python 星号(*)的多种用途
2020/09/21 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
德国苹果商店:MacTrade
2020/05/18 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
ktv好的活动方案
2014/08/17 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
爱情保证书
2015/01/17 职场文书
中秋晚会致辞
2015/07/31 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript