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

18.5.8. ОчередиQueues

Исходный код: Lib/asyncio/queues.py

Очереди:

API очередей asyncio было разработано так, чтобы быть близким к классам модуля 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().

В отличие от queue из стандартной библиотеки, размер этой очереди можно надёжно узнать с помощью 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

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

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

18.5.8.3. LifoQueue

class asyncio.LifoQueue

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

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

exception asyncio.QueueEmpty

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

exception asyncio.QueueFull

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