Python queue结构官方文档解读
队列:是线性表的一种。使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列。幸运的是,在Python标准库中,有一个标准库queue可以实现以上数据结构。
简介
queue(队列)是Python的一个标准库,其用法在official documentation中有详细介绍。现总结如下:
首先,queue适用于多线程编程,处理多线程能力极佳。
Python中的queue包括三种:
- FIFO queue:即“先进先出”队列,标准队列类型
- LIFO queue:LIFO的意思是“后进先出”,可以用来实现“栈”
- priority queue:优先级队列。队列中所有元素已经排序好了,值最小的先出
实现方法如下:
- FIFO queue :
queue.Queue(maxsize = 0)
即标准队列。其中有一个可选参数:maxize,可以设置入队元素最多有几个(maxsize个)。如果maxsize <= 0或者不填,那么maxsize即无穷(infinite)。
- LIFO queue :
queue.LifoQueue(maxsize = 0)
即“后进先出”队列。参数同上。同样的,如果maxsize <= 0,那么maxsize无穷。
- priority queue :
queue.PriorityQueue(maxsize = 0)
可以创建一个优先级队列,省得排序了。
- 在Python 3.7.+ 版本中又引入了一个新的结构:SimpleQueue:
queue.SimpleQueue()
构造一个maxsize = 0的FIFO队列。只有Python 3.7以上版本支持。
操作方法
-
Queue.qsize()
返回队列的实际大小。 -
Queue.empty()
如果队列是空的,则返回True,否则返回False。 -
Queue.full()
如果队列是满载的,则返回True,否则返回False。 -
Queue.put_nowait(item)
将元素放到队列中。等同于Queue.put(item,False) -
Queue.get_nowait()
将元素移出队列并返回,等于Queue.get(False)
以下方法运用于多线程编程中:
-
Queue.put(item, block = True, timeout = None)
将元素放到队列中。运用于线程编程中 -
Queue.get(block = True, timeout = None)
将元素移出队列,运用于线程编程中。 -
Queue.task_done()
表示待入队的任务已经完成,运用于线程编程中。 -
Queue.join()
暂不太懂,待更新。
在Simple_Queue中,除了task_done()和join()两个方法,其他的都支持。