Очереди
Исходный код: Lib/asyncio/queues.py
Очереди:
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