目录python queue队列类型及函数
1.队列的种类
2.队列函数
python 队列类及其方法
1.Python的队列类型
2.队列对象(适用Queue、LifoQueue和PriorityQueue)
3.SimpleQueue对象
python queue队列类型及函数
1.队列的种类
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()
2.队列函数
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会一直阻塞')python 队列类及其方法
1.Python的队列类型
from queue import Queue, LifiQueue, PriorityQueue, SimpleQueueFIFO(先入先出)
Queue(maxsize=0):FIFO队列的构造函数。maxsize是一个整数,用于设置放入队列中数据的上限。一旦达到此大小,插入将被阻塞。如果maxsize<=0,则队列大小为无限。
LIFO(后进先出)
LifoQueue(maxsize=0):LIFO队列的构造函数,其它同上。
优先级队列PriorityQueue(maxsize=0):优先级队列的构造函数,其它同上。
SimpleQueue:FIFO队列的简单形式,缺少诸如任务跟踪之类的高级功能。
Empty:在空对象上调用get()方法,引发的异常队列。
Full:在已满的对象上调用put()方法,引发的异常队列。
2.队列对象(适用Queue、LifoQueue和PriorityQueue)
qsize()返回队列的大小。
注意qsize()>0不能保证后续的get()不会阻塞,qsize() 如果返回True不能保证后续对put()的调用都不会阻塞。如果返回False也不能保证对get()的后续调用不会阻塞。 如果返回True不能保证对get()的后续调用不会阻塞。如果full返回False也不能保证后续对put()的调用不会阻塞。 如果block=True, timeout=None则在必要时进行阻塞,直到队列有空间为止。如果timeout=正数,则它最多超时正数秒。Full队列如果在该时间内没有空间可用,会引发异常。如果block=False,队列有空间,则将数据放入队列(超时被忽略),否则引发Full异常。 如果block=True, timeout=None则在必要时进行阻塞,直到队列有数据为止。如果timeout=正数,则它最多超时正数秒。Empty队列如果在该时间内没有数据可用,会引发异常。如果block=False,队列有数据,则会返回一个数据(超时被忽略),否则引发Empty异常。 您可能感兴趣的文章:Python queue模块的用法Python多线程 Queue 模块常见用法Python中的优先队列(priority queue)和堆(heap) python3 queue多线程通信Python queue模块攻略全解empty()如果队列是空的返回True,否则返回False。full()如果队列满了返回True,否则返回False。put(item, block=True, timeout=None)将数据插入队列中。put_nowait(item)等同于put(item, False)。get(block=True, timeout=None)从队列中删除并返回一个数据。get_nowait()等同于get(False)。task_done()表示先前排队的任务已完成。join()阻塞直到队列中的所有数据都已获得处理。每当将项目添加到队列时,未完成任务的数量就会增加。每当使用者线程调用task_done()以指示已检索到该项目并且该项目的所有工作完成时,该计数就会减少。当未完成的任务数降至零时,join()取消阻止。3.SimpleQueue对象
qsize() empty() put(item, block = True, timeout = None ) put_nowait(item) get(block = True,timeout = None) get_nowait(item)以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
