本文主要介绍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队列的详细讲解和集成。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!