18.5.8. 队列 — Python 文档
来自菜鸟教程
Python/docs/3.6/library/asyncio-queue
18.5.8. 队列
源代码: :source:`Lib/asyncio/queues.py`
队列:
asyncio 队列 API 被设计为接近 queue 模块的类(Queue、PriorityQueue、LifoQueue),但它没有超时参数。 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
。
- 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.3. LifoQueue
- class asyncio.LifoQueue
- Queue 的子类,首先检索最近添加的条目。
18.5.8.3.1。 例外
- exception asyncio.QueueEmpty
- 在空的 Queue 对象上调用 get_nowait() 方法时引发异常。
- exception asyncio.QueueFull
- 在已满的 Queue 对象上调用 put_nowait() 方法时引发异常。