18.5.8. Очереди
Исходный код: Lib/asyncio/queues.py
Очереди:
API очередей asyncio было спроектировано так, чтобы быть близким к классам модуля queue (Queue, PriorityQueue, LifoQueue), но оно не имеет параметра timeout. Функция asyncio.wait_for() может быть использована для отмены задачи после тайм-аута.
18.5.8.1. Очередь
-
class
asyncio.Queue(maxsize=0, *, loop=None)¶ Очередь, предназначенная для координации корутин-производителя и корутин-потребителя.
Если maxsize меньше или равен нулю, размер очереди бесконечен. Если он является целым числом больше
0, тоyield from put()будет блокироваться, когда очередь достигнет maxsize, пока элемент не будет удалён с помощьюget().В отличие от стандартной библиотеки
queue, размер этой очереди можно надёжно узнать с помощьюqsize(), поскольку однопоточное приложение asyncio не будет прервано между вызовомqsize()и выполнением операции над очередью.Этот класс является не потокобезопасным.
Изменено в версии 3.4.4: Новые методы
join()иtask_done().-
empty()¶ Возвращает
True, если очередь пуста,Falseв противном случае.
-
full()¶ Возвращает
True, если в очереди естьmaxsizeэлементов.Примечание
Если очередь была инициализирована с
maxsize=0(по умолчанию), тоfull()никогда неTrue.
-
coroutine
get()¶ Извлекает и возвращает элемент из очереди. Если очередь пуста, ожидает, пока элемент не станет доступен.
Этот метод является корутиной.
Смотрите также
Метод
empty().
-
get_nowait()¶ Удаляет и возвращает элемент из очереди.
Возвращает элемент, если он немедленно доступен, иначе возбуждает
QueueEmpty.
-
coroutine
join()¶ Блокирует выполнение, пока все элементы в очереди не будут получены и обработаны.
Счётчик незавершённых задач увеличивается каждый раз, когда элемент добавляется в очередь. Счётчик уменьшается, когда поток-потребитель вызывает
task_done(), чтобы указать, что элемент был получен и вся работа над ним завершена. Когда счётчик незавершённых задач падает до нуля,join()разблокируется.Этот метод является корутиной.
Новое в версии 3.4.4.
-
coroutine
put(item)¶ Помещает элемент в очередь. Если очередь полна, ожидает, пока не освободится место, перед добавлением элемента.
Этот метод является корутиной.
Смотрите также
Метод
full().
-
put_nowait(элемент)¶ Помещает элемент в очередь без блокировки.
Если свободный слот недоступен, вызывает
QueueFull.
-
qsize()¶ Количество элементов в очереди.
-
task_done()¶ Указывает, что ранее поставленная в очередь задача завершена.
Используется потребителями очереди. Для каждого
get(), используемого для получения задачи, последующий вызовtask_done()сообщает очереди, что обработка задачи завершена.If a
join()is currently blocking, it will resume when all items have been processed (meaning that atask_done()call was received for every item that had beenput()into the queue).Вызывает
ValueError, если вызван большее количество раз, чем было элементов, помещённых в очередь.Новое в версии 3.4.4.
-
maxsize¶ Количество элементов, допустимое в очереди.
-
18.5.8.2. PriorityQueue
18.5.8.3. LifoQueue
-
class
asyncio.LifoQueue¶ Подкласс
Queue, который извлекает первыми самые последние добавленные записи.
18.5.8.3.1. Исключения
-
exception
asyncio.QueueEmpty¶ Исключение, вызываемое, когда метод
get_nowait()вызывается для объектаQueue, который пуст.
-
exception
asyncio.QueueFull¶ Исключение, вызываемое, когда метод
put_nowait()вызывается для объектаQueue, который полон.