线程安全的queue, 其实现了3种形式的queue,基于不同的写入读出规则
- FIFO:
class queue.Queue(maxsize=0)
- LIFO(stack):
class queue.LifoQueue(maxsize=0)
- priority queue(优先队列):
class queue.PriorityQueue(maxsize=0)
, 使用内置模块heapq(堆)维护,最小的值最先被取出
在内部,queue使用锁暂时的阻塞竞争的线程,但是其没有被设计为操作可重入性(reentrancy)的线程
拥有两个异常:
exception queue.Empty
exception queue.Full
class queue.Queue(maxsize=0)
对象, FIFO
Queue.put(item, block=True, timeout=None)
: 写入元素Queue.get(block=True, timeout=None)
: 读取元素Queue.qsize()
: 当前queue的大小Queue.empty()
: queue是否为空Queue.full()
: queue是否已满Queue.put_nowait(item)
: 与put(item, block=False)
等价Queue.get_nowait()
: 与get(block=False)
等价
In [15]: q2 = queue.Queue(2)
In [16]: q2.put(1)
In [17]: q2.put(2)
In [18]: q2.full()
Out[18]: True
In [15]: q2 = queue.Queue(2)
In [16]: q2.put(1)
In [17]: q2.put(2)
In [18]: q2.full()
Out[18]: True
In [19]: q2.qsize()
Out[19]: 2
In [20]: q2.get()
Out[20]: 1
In [22]: q2.qsize()
Out[22]: 1