18.5.8. 队列 ¶
队列:
asyncio队列API被设计为接近queue
模块(Queue
,PriorityQueue
,LifoQueue
)的类,但它没有timeout参数。asyncio.wait_for()
函数可用于在超时后取消任务。
18.5.8.1. Queue¶
- class
asyncio.
Queue
(maxsize=0, *, loop=None)¶ 队列,用于协调生产者和消费者协程。
如果maxsize小于或等于零,则队列大小是无限的。如果是大于
0
的整数,则yield from put()
将在队列达到maxsize时阻塞,直到get()
删除项。与标准库
队列
不同,您可以使用qsize()
可靠地知道此队列的大小,因为您的单线程异步应用程序不会在调用qsize ()
并对队列执行操作。此类为不是线程安全。
在版本3.4.4中更改:新增
join()
和task_done()
方法。-
empty
()¶ 如果队列为空,返回
True
,否则返回False
。
-
get_nowait
()¶ 从队列中删除并返回项目。
如果一个项目立即可用,返回一个项目,否则引发
QueueEmpty
。
- coroutine
join
()¶ 阻塞,直到队列中的所有项目都被获取和处理。
每当项目添加到队列时,未完成任务的计数就会增加。当消费者线程调用
task_done()
以指示该项目已检索并且其上的所有工作都已完成时,计数将减少。当未完成任务的计数下降为零时,join()
解除阻塞。此方法是协程。
版本3.4.4中的新功能。
-
qsize
()¶ 队列中的项目数。
-
task_done
()¶ 指示当前队列的任务已完成。
由队列消费者调用。对于获取任务的每个
get()
,对task_done()
的后续调用会告诉队列任务上的处理已完成。如果
join()
当前正在阻塞,它将在所有项目都已处理完毕后恢复(这意味着task_done()
put()
已经被队列中的所有put方法调用过。如果调用的次数比在队列中放置的项目多,将引发
ValueError
异常。版本3.4.4中的新功能。
-
maxsize
¶ 队列中允许的项目数。
-
18.5.8.2. PriorityQueue¶优先级队列
18.5.8.3. LifoQueue¶后入先出队列
18.5.8.3.1. Exceptions¶
- exception
asyncio.
QueueEmpty
¶ 在
队列
对象为空时调用get_nowait()
方法时引发的异常。
- exception
asyncio.
QueueFull
¶ 当
put_nowait()
方法在已满的队列
对象上调用时引发异常。