18.5.8. 队列 — Python 文档

来自菜鸟教程
Python/docs/3.6/library/asyncio-queue
跳转至:导航、​搜索

18.5.8. 队列

源代码: :source:`Lib/asyncio/queues.py`

队列:

asyncio 队列 API 被设计为接近 queue 模块的类(QueuePriorityQueueLifoQueue),但它没有超时参数。 asyncio.wait_for() 函数可用于在超时后取消任务。

18.5.8.1. 队列

class asyncio.Queue(maxsize=0, \*, loop=None)

一个队列,用于协调生产者和消费者协程。

如果 maxsize 小于或等于 0,则队列大小为无限大。 如果是一个大于0的整数,那么当队列达到maxsize时,yield from put()就会阻塞,直到一个item被get()移除。

与标准库 queue 不同,您可以使用 qsize() 可靠地知道此队列的大小,因为您的单线程异步应用程序不会在调用 qsize() 之间中断 并对队列进行操作。

此类是 不是线程安全的

3.4.4 版更改: 新增 join()task_done() 方法。

empty()

如果队列为空,则返回 True,否则返回 False

full()

如果队列中有 maxsize 个项目,则返回 True

笔记

如果队列是用 maxsize=0(默认值)初始化的,那么 full() 永远不会是 True

get_nowait()

从队列中移除并返回一个项目。

如果一项立即可用,则返回一项,否则引发 QueueEmpty

put_nowait(item)

将项目放入队列而不阻塞。

如果没有立即可用的空闲插槽,则引发 QueueFull

qsize()

队列中的项目数。

task_done()

指示以前排队的任务已完成。

由队列消费者使用。 对于用于获取任务的每个 get(),对 task_done() 的后续调用告诉队列该任务的处理已完成。

如果一个 join() 当前正在阻塞,它会在所有项目都被处理完后恢复(这意味着每个已经被 put() 进入的项目都收到了一个 task_done() 调用队列)。

如果调用次数多于放入队列的项目,则引发 ValueError

版本 3.4.4 中的新功能。

maxsize

队列中允许的项目数。


18.5.8.2. 优先队列

class asyncio.PriorityQueue

Queue的一个子类; 按优先级顺序检索条目(从低到高)。

条目通常是以下形式的元组:(优先级编号,数据)。


18.5.8.3. LifoQueue

class asyncio.LifoQueue
Queue 的子类,首先检索最近添加的条目。

18.5.8.3.1。 例外

exception asyncio.QueueEmpty
在空的 Queue 对象上调用 get_nowait() 方法时引发异常。
exception asyncio.QueueFull
在已满的 Queue 对象上调用 put_nowait() 方法时引发异常。