Spec-Zone.ru › Python 3.6

Очереди

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

Очереди:

  • Queue
  • PriorityQueue
  • LifoQueue

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(item)

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

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

qsize()

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

task_done()

Указать, что задача, ранее помещенная в очередь, завершена.

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

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

Возвращает 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. Исключения

exception asyncio.QueueEmpty

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

exception asyncio.QueueFull

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

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/asyncio-queue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API