python queue
2020-04-15 本文已影响0人
墨流引
Queue
queue
模块实现多生产者,多消费者队列。当信息必须安全的在多线程之间交换时,它在线程编程中是特别有用的。此模块中的Queue
类实现了所有锁定需求的语义。它依赖于Python支持的线程可用性;请参阅threading
模块。模块实现了三种类型的队列,它们的区别仅仅是条目取回的顺序。在 FIFO 队列中,先添加的任务先取回。在LIFO队列中,最近被添加的条目先取回(操作类似一个堆栈)。优先级队列中,条目将保持排序( 使用
heapq
模块 ) 并且最小值的条目第一个返回。在内部,这三个类型的队列使用锁来临时阻塞竞争线程;然而,它们并未被设计用于线程的重入性处理。
此外,模块实现了一个 "简单的" FIFO队列类型,SimpleQueue
,这个特殊实现为小功能在交换中提供额外的保障。
FIFO(first-in,first-out)
import queue
fifo_queue = queue.Queue(maxsize=0)
# maxsize是个整数,用于设置可以放入队列中的项目数的上限。
# 当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。
# 如果 maxsize 小于等于零,队列尺寸为无限大。
LIFO(last-in,first-out)
lifo_queue = queue.LifoQueue(maxsize=0)
# maxsize是个整数,用于设置可以放入队列中的项目数的上限。
# 当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。
# 如果 maxsize 小于等于零,队列尺寸为无限大。
Queue对象
队列对象 (Queue
, LifoQueue
, 或者 PriorityQueue
) 提供下列描述的公共方法。
from queue import Queue
Queue.qsize()
# 返回队列的大致大小。
Queue.empty()
# 如果队列为空,返回 True ,否则返回 False 。
Queue.full()
# 如果队列是满的返回 True ,否则返回 False 。
Queue.put(item, block=True, timeout=None)
# 将 item 放入队列。
# 如果可选参数 block 是 true 并且 timeout是None (默认),则在必要时阻塞至有空闲插槽可用。
Queue.put_nowait(item)
# 相当于 put(item, False) 。
Queue.get(block=True, timeout=None)
# 从队列中移除并返回一个项目。
# 如果可选参数 block 是 true 并且 timeout 是 None (默认值),则在必要时阻塞至项目可得到。
Queue.get_nowait()
# 相当于 get(False)
跟踪 排队的任务 是否 被守护的消费者线程 完整的处理。
Queue.task_done()
# 表示前面排队的任务已经被完成。
Queue.join()
# 阻塞至队列中所有的元素都被接收和处理完毕。
.
.
.