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()
# 阻塞至队列中所有的元素都被接收和处理完毕。

.
.
.

参考文档

python官方文档module-queue
queue源码

上一篇下一篇

猜你喜欢

热点阅读