import:: import queue doc:: queue


queue 模块实现了多生产者、多消费者队列,特别适用于消息必须安全地在多线程间交换的线程编程。

Queue

FIFO 先进先出队列,Queue 是其多进程版。

from queue import Queue
 
q = Queue()
q = Queue(maxsize=100) # 队列上限大小,0或小于0,则无限大
 
q.put()   # 加入队列
q.get()   # 从队列中移除
q.qsize() # 返回队列大小
q.empty() # 队列为空返回 True
q.full()  # 队列如满返回 True
  • .task_done(): 告诉队列任务已经完成
  • .join(): 阻塞队列,直到所有任务都处理完成

一般 task_done() 和 join() 配合使用,join() 告诉队列任务都已经添加完成,可以执行了,task_doen 告诉队列,这个任务已经完成了,join() 会去判断队列所有任务是否都已经执行完毕。

在 daemon 为 True 的情况下,不使用 task_done 和 join 会导致进程提前结束。

LifoQueue

LIFO 后进先出队列,其他和 Queue 一致。区别是使用 get() 删除的是最新插入的元素。

ProorityQueue

优先级队列。

SimpleQueue

FIFO 队列,无任务跟踪等功能