Документация Python неофициальный перевод
Содержание страницы

18.5.8. ОчередиQueues

Очереди:

API очередей asyncio был спроектирован так, чтобы быть близким к классам модуля очередь (Очередь, PriorityQueue, LifoQueue), но у него нет параметра тайм-аута. Функцию asyncio.wait_for() можно использовать для отмены задачи по истечении тайм-аута.

18.5.8.1. ОчередьQueue

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

Очередь, полезная для координации корутин производителя и потребителя.

Если maxsize меньше или равен нулю, размер очереди бесконечен. Если он – целое число больше 0, то yield from put() будет блокироваться, когда очередь достигнет maxsize, пока элемент не будет извлечён с помощью get().

В отличие от модуля очередь стандартной библиотеки, размер этой очереди можно точно узнать с помощью qsize(), так как однопоточное приложение asyncio не будет прервано между вызовом qsize() и выполнением операции над очередью.

This class is не является потокобезопасным.

Изменено в версии 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(item)

Помещает элемент в очередь без блокировки.

Если свободный слот недоступен немедленно, возбуждает QueueFull.

qsize()

Количество элементов в очереди.

task_done()

Указывает, что ранее поставленная в очередь задача завершена.

Используется потребителями очереди. Для каждого get(), который используется для получения задачи, последующий вызов task_done() сообщает очереди, что обработка задачи завершена.

Если join() в данный момент блокируется, он возобновит работу, когда все элементы будут обработаны (то есть для каждого элемента, который был помещён в очередь с помощью put(), будет получен вызов task_done()).

Возбуждает ValueError, если был вызван больше раз, чем было помещено элементов в очередь.

Новое в версии 3.4.4.

maxsize

Количество элементов, которое может содержать очередь.

18.5.8.2. PriorityQueue

class asyncio.PriorityQueue

Подкласс очередь; извлекает записи в порядке приоритета (сначала наименьший).

Записи обычно представляют собой кортежи вида: (номер приоритета, данные).

18.5.8.3. LifoQueue

class asyncio.LifoQueue

Подкласс очередь; извлекает записи, добавленные последними, сначала.

18.5.8.3.1. JoinableQueue

class asyncio.JoinableQueue

Устаревший псевдоним для очередь.

Устарело с версии 3.4.4.

18.5.8.3.2. ИсключенияExceptions

exception asyncio.QueueEmpty

Исключение возникает, когда метод get_nowait() вызывается на объекте очередь, который пуст.

exception asyncio.QueueFull

Исключение возникает, когда метод put_nowait() вызывается на объекте очередь, который заполнен.