queue 队列,队列queue的用法

queue 队列,队列queue的用法,python队列Queue的详解

本文主要介绍python队列,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

Queue

它是QueuePython标准库中的线程安全队列(FIFO)实现。它提供了一种适合多线程编程的先进先出数据结构,即队列,用于生产者线程和消费者线程之间传递信息。

基本FIFO队列

班级队列。队列(maxsize=0)

即先进先出,先入先出。队列提供了一个简单易用的FIFO容器。maxsize是一个整数,表示队列中可以存储的数据数量的上限。一旦达到上限,插入将导致阻塞,直到队列中的数据用完。如果maxsize小于或等于0,则队列大小没有限制。

举个栗子:

导入队列

q=队列。队列()

对于范围(5)中的I:

q.put(i)

而不是q.empty():

print q.get()

输出:

0

一个

2

LIFO队列

班级队列。LifoQueue(maxsize=0)

LIFO的意思是后进先出,后进先出。类似于stack,用起来也很简单,maxsize同上。

再给我举个栗子:

导入队列

q=队列。LifoQueue()

对于范围(5)中的I:

q.put(i)

而不是q.empty():

print q.get()

输出:

2

一个

0

您可以看到,您只是替换了队列。队列中的Quenu类。LifiQueue类。

优先队列

班级队列。PriorityQueue(maxsize=0)

构建一个优先级队列。Maxsize的用法同上。

导入队列

导入线程

类别作业(对象):

def __init__(自身,优先级,描述):

自我优先=优先权

自我描述=描述

打印“作业:”描述

返回

def __cmp__(自身,其他):

返回cmp(自身优先级,其他优先级)

q=队列。优先级队列()

q.put(Job(3, 3级作业))

q.put(Job(10, 10级作业))

q.put(Job(1, 1级作业))

定义进程_作业(q):

虽然正确:

next_job=q.get()

打印“用于:”,下一个作业。描述

q.task_done()

工人=[穿线。Thread(target=process_job,args=(q,),

穿线。线程(target=process_job,args=(q,))

]

对于工人中的w:

w.setDaemon(True)

w .启动()

问加入()

结果

职务:3级职务

工作:10级工作

职务:一级职务

适用于:1级工作

适用于:3级工作

适用于:职务:10级职务

一些常用方法

task_done()

意味着之前加入团队的一个任务已经完成。由队列的使用者线程调用。每个get()调用获得一个任务,下一个task_done()调用告诉队列任务已经被处理。

如果当前的join()正在阻塞,那么当队列中的所有任务都被处理后,它将恢复执行(也就是说,put()所排队的每个任务都有一个相应的task_done()调用)。

join()

阻塞调用线程,直到队列中的所有任务都被处理完。

只要数据被添加到队列中,未完成任务的数量就会增加。当消费者线程调用task_done()时,意味着一个消费者获得了任务并完成了它,未完成的任务数量就会减少。当未完成任务的数量下降到0时,join()解除阻塞。

put(项目[,块[,超时]])

将项目放入队列。

如果可选参数block为True,timeout为空对象(默认情况是阻塞调用,无超时)。

如果timeout是正整数,调用进程将被阻塞长达超时秒。如果始终没有可用的空闲空间,将抛出一个完全异常(超时阻塞调用)。

如果block为False,如果有可用的空闲空间,则将数据放入队列中;否则,立即抛出完整异常。

它的非阻塞版本是put_nowait,相当于put(item,False)

get([block[, timeout]])

从队列中移除并返回一条数据。与带有blocktimeout参数的put方法相同。

它的非阻塞方法是“get _ nowait()”,相当于get(False)

empty()

如果队列为空,则返回True,否则返回False。

以上是边肖介绍的python队列的详细讲解和集成。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

queue 队列,队列queue的用法