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

作者:Cecilia喜陈 时间:2021-11-16 18:43:02 

一、线程队列

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() :块直到队列被消费完毕。

来源:https://www.cnblogs.com/xichenHome/p/11569106.html

标签:python,线程,队列,queue
0
投稿

猜你喜欢

  • JS 显示当前日期+星期(静态)

    2007-09-11 13:29:00
  • asp如何实现页面执行时间及搜索时间

    2007-11-12 22:48:00
  • 解析:轻松掌握 字符串文字字符集和校对

    2008-12-17 17:07:00
  • Python利用Turtle绘制Technoblade的示例代码

    2023-08-23 22:43:01
  • 未将对象引用设置到对象的实例 (System.NullReferenceException)

    2023-06-27 10:46:53
  • oracle中的视图详解

    2009-12-22 11:48:00
  • Go语言实现的树形结构数据比较算法实例

    2023-08-06 18:18:39
  • 如何使用w3 upload上传组件上传文件?

    2010-05-16 15:11:00
  • PHP利用func_get_args和func_num_args函数实现函数重载实例

    2023-06-15 09:25:51
  • 天气预报调用代码

    2008-11-18 15:59:00
  • 用ASP打造一个小型的网页BBS系统

    2008-10-10 16:36:00
  • python关键字传递参数实例分析

    2023-08-24 04:28:34
  • asp之自动闭合HTML/ubb标签函数 附简单注释

    2011-02-28 11:24:00
  • Python数据类型转换汇总

    2023-05-13 16:33:00
  • python 第三方库的安装及pip的使用详解

    2023-12-27 07:06:53
  • Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器

    2007-09-23 12:43:00
  • PHP文件运行步骤以及数据库的连接代码

    2023-05-25 08:32:51
  • z-blog文章摘要图文混排

    2009-02-28 13:49:00
  • python网络爬虫学习笔记(1)

    2023-12-24 04:08:16
  • PHP Session条件竞争超详细讲解

    2023-06-03 12:49:00
  • asp之家 网络编程 m.aspxhome.com