常用方法
put(item[, block[, timeout]])
向队列里添加数据。
参数
item:要放入队列的数据。
block:可选参数,默认值为True。当值为True时,阻塞调用(当栈满一直无空间可用,阻塞调用,直到有栈有空间,或timeout秒后结束。
timeout:阻塞超时,当timeout>0时,阻塞调用timeout后结束。
get(block[, timeout])
将队列数据取出。
参数
block:可选参数,默认值为True。当值为True时,阻塞调用(当试图向空栈取出数据时,阻塞调用,直到有栈内有数据,或timeout秒后结束。
timeout:阻塞超时,当timeout>0时,阻塞调用timeout后结束。
empty()
判断队列是否为空,空返回True,非空返回False
full()
判断队列是否为满,满返回True,非满返回False
join()
阻塞调用线程,直到队列的所有任务都被处理掉。
只要数据加入队列,未完成的任务数就会增加。当消费者线程调用task_done(),未完成的任务数九会减少。当未完成的任务数降至0,join()解除阻塞。
task_done()
意味着上一个任务处理完成,由队列的消费者线程调用。每一个get()的调用获得一个任务,task_done()调用告诉队列对应的任务已经完成。
FIFO队列(First In First Out)
queue.Queue(maxsize=0)
先进先出队列,当maxsize>0时,队列数据大小限制为maxsize,当maxsize<=0时,大小无限制。
代码:
import queue
q=queue.Queue()
for each in range(5):
q.put(each)
while not q.empty():
print(q.get())
结果:
0
1
2
3
4
LIFO队列(Last In First Out)
queue.LifoQueue(maxsize=0)
后进先出队列,当maxsize>0时,队列数据大小限制为maxsize,当maxsize<=0时,大小无限制。
代码:
import queue
q=queue.LifoQueue()
for each in range(5):
q.put(each)
while not q.empty():
print(q.get())
结果:
4
3
2
1
0
优先级队列
queue.PriorityQueue(maxsize=0)
优先级队列,当maxsize>0时,队列数据大小限制为maxsize,当maxsize<=0时,大小无限制。
代码:
import queue
class job():
def __init__(self,priority,description):
self.priority=priority
self.description=description
def __lt__(self,other):
return self.priority<other.priority
q=queue.PriorityQueue()
q.put(job(10,"priority 10"))
q.put(job(4,"priority 4"))
q.put(job(3,"priority 3"))
q.put(job(1,"priority 1"))
while not q.empty():
print(q.get().description)
结果:
priority 1
priority 3
priority 4
priority 10