Python 官方文档:入门教程 => 点击学习
目录python queue队列类型及函数1.队列的种类2.队列函数Python 队列类及其方法1.Python的队列类型2.队列对象(适用Queue、LifoQueue和Prior
Python queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)
LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)
还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)
import queue
# 先进先出队列
queue_obj = queue.Queue()
for i in range(3):
queue_obj.put(i)
for i in range(3):
print(queue_obj.get())
"""执行结果
0
1
2
"""
# 先进后出队列,类似于堆栈
queue_obj = queue.LifoQueue()
for i in range(3):
queue_obj.put(i)
for i in range(3):
print(queue_obj.get())
"""执行结果
2
1
0
"""
# 优先级队列
import Queue
import threading
class Job(object):
def __init__(self, priority, description):
self.priority = priority
self.description = description
print 'Job:',description
return
def __cmp__(self, other):
return cmp(self.priority, other.priority)
q = Queue.PriorityQueue()
q.put(Job(3, 'level 3 job'))
q.put(Job(10, 'level 10 job'))
q.put(Job(1, 'level 1 job'))
def process_job(q):
while True:
next_job = q.get()
print 'for:', next_job.description
q.task_done()
workers = [threading.Thread(target=process_job, args=(q,)),
threading.Thread(target=process_job, args=(q,))
]
for w in workers:
w.setDaemon(True)
w.start()
q.join()
maxsize = 10
queue_obj = queue.Queue(maxsize) # maxsize 代表队列的上限, 如果队列已满, 则插入时需要等待, maxsize为零或负数时.队列没有限制
queue_obj.get(block=True, timeout=None) # block为True时,表示等待获取,直至timeout超时
queue_obj.get_nowait() # 当获取不到元素时,报错
queue_obj.put(item="待插入的元素", block=True, timeout=None) # block为True时,表示等待插入,直至timeout超时
queue_obj.put_nowait('待插入的元素') # 当不能插入元素时报错
queue_obj.empty() # 队列为空时,返回True
queue_obj.full() # 如果队列满时,返回True
queue_obj.task_done() # 在每次获取队列中的元素, 操作完成之后, 调用该函数告诉队列我已经使用完成, 主要是给join函数使用
queue_obj.join() # 等待队列内的元素全部被获取后, 再接触阻塞(直至所有的任务全部task_done)
"""下面的例子验证toask_done和join的关系"""
for i in range(3):
queue_obj.put(i) # 这里像队列中添加三个元素
queue_obj.get() # 这里获取队列中的消息
queue_obj.task_done()
queue_obj.get() # 这里获取队列中的消息
queue_obj.task_done()
queue_obj.get() # 这里获取队列中的消息
queue_obj.task_done()
queue_obj.join()
print('直至队列中的所有元素全部都被取出, join函数才不会阻塞, 如果只执行了两次task_done函数, 则join会一直阻塞')
from queue import Queue, LifiQueue, PriorityQueue, SimpleQueue
FIFO
(先入先出)Queue(maxsize=0)
:FIFO队列的构造函数。maxsize是一个整数,用于设置放入队列中数据的上限。一旦达到此大小,插入将被阻塞。如果maxsize<=0,则队列大小为无限。LIFO
(后进先出)LifoQueue(maxsize=0)
:LIFO队列的构造函数,其它同上。PriorityQueue(maxsize=0)
:优先级队列的构造函数,其它同上。SimpleQueue
:FIFO队列的简单形式,缺少诸如任务跟踪之类的高级功能。Empty
:在空对象上调用get()方法,引发的异常队列。Full
:在已满的对象上调用put()方法,引发的异常队列。qsize()
empty()
full()
put(item, block=True, timeout=None)
put_nowait(item)
get(block=True, timeout=None)
get_nowait()
task_done()
join()
qsize()
empty()
put(item, block = True, timeout = None )
put_nowait(item)
get(block = True,timeout = None)
get_nowait(item)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: python中的queue队列类型及函数用法
本文链接: https://www.lsjlt.com/news/120632.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0