Содержание страницы
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¶
18.5.8.3. LifoQueue¶
18.5.8.3.1. JoinableQueue¶
18.5.8.3.2. Исключения¶Exceptions
- exception asyncio.QueueEmpty¶
Исключение возникает, когда метод get_nowait() вызывается на объекте очередь, который пуст.
- exception asyncio.QueueFull¶
Исключение возникает, когда метод put_nowait() вызывается на объекте очередь, который заполнен.