Spec-Zone.ru › Python 3.5

Очереди

Очереди:

  • Queue
  • PriorityQueue
  • LifoQueue

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

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

Количество элементов, разрешенных в очереди.

2. Очередь с приоритетами

class asyncio.PriorityQueue

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

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

3. Очередь LIFO

class asyncio.LifoQueue

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

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.5/library/asyncio-queue.html

Spec-Zone.ru

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