Содержание страницы
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¶
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.