Документация Python неофициальный перевод

asyncio-queue.md

128 строк · 9.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.5/library/asyncio-queue.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 18.5.8. Очереди89Очереди:1011- [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue)12- [`PriorityQueue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.PriorityQueue)13- [`LifoQueue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.LifoQueue)1415API очередей asyncio было разработано так, чтобы быть близким к классам модуля [`queue`](https://python-all.ru/3.5/library/queue.html#module-queue) ([`Queue`](https://python-all.ru/3.5/library/queue.html#queue.Queue), [`PriorityQueue`](https://python-all.ru/3.5/library/queue.html#queue.PriorityQueue), [`LifoQueue`](https://python-all.ru/3.5/library/queue.html#queue.LifoQueue)), но в нём отсутствует параметр *timeout*. Функция [`asyncio.wait_for()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.wait_for) может быть использована для отмены задачи по истечении времени ожидания.1617## 18.5.8.1. Очередь1819#### `class asyncio.Queue(maxsize=0, *, loop=None)`2021Очередь, полезная для координации корутин производителя и потребителя.2223Если *maxsize* меньше или равен нулю, размер очереди бесконечен. Если это целое число больше `0`, то `yield from put()` будет блокироваться, когда очередь достигнет *maxsize*, пока элемент не будет удалён с помощью [`get()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.get).2425В отличие от [`queue`](https://python-all.ru/3.5/library/queue.html#module-queue) из стандартной библиотеки, размер этой очереди можно надёжно узнать с помощью [`qsize()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.qsize), так как однопоточное приложение asyncio не будет прервано между вызовом [`qsize()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.qsize) и выполнением операции над очередью.2627This class is [не является потокобезопасным](https://python-all.ru/3.5/library/asyncio-dev.html#asyncio-multithreading).2829Изменено в версии 3.4.4: Новые методы [`join()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.join) и [`task_done()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.task_done).3031#### `empty()`3233Возвращает `True`, если очередь пуста, иначе `False`.3435#### `full()`3637Возвращает `True`, если в очереди [`maxsize`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.maxsize) элементов.3839> **Примечание**40>41> Если очередь была инициализирована с `maxsize=0` (по умолчанию), то [`full()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.full) никогда не `True`.4243#### `coroutine get()`4445Удаляет и возвращает элемент из очереди. Если очередь пуста, ожидает, пока элемент не станет доступен.4647Этот метод является [корутиной](https://python-all.ru/3.5/library/asyncio-task.html#coroutine).4849> **См. также**50>51> Метод [`empty()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.empty).5253#### `get_nowait()`5455Извлекает и возвращает элемент из очереди.5657Возвращает элемент, если он доступен немедленно, в противном случае вызывает [`QueueEmpty`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.QueueEmpty).5859#### `coroutine join()`6061Блокируется до тех пор, пока все элементы в очереди не будут извлечены и обработаны.6263Счётчик незавершённых задач увеличивается всякий раз, когда элемент добавляется в очередь. Счётчик уменьшается, когда поток-потребитель вызывает [`task_done()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.task_done), чтобы указать, что элемент был получен и вся работа над ним завершена. Когда счётчик незавершённых задач становится равным нулю, [`join()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.join) разблокируется.6465Этот метод является [корутиной](https://python-all.ru/3.5/library/asyncio-task.html#coroutine).6667Новое в версии 3.4.4.6869#### `coroutine put(item)`7071Помещает элемент в очередь. Если очередь полна, ожидает освобождения места, прежде чем добавить элемент.7273Этот метод является [корутиной](https://python-all.ru/3.5/library/asyncio-task.html#coroutine).7475> **См. также**76>77> Метод [`full()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.full).7879#### `put_nowait(item)`8081Помещает элемент в очередь без блокировки.8283Если свободный слот недоступен сразу, возбуждается исключение [`QueueFull`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.QueueFull).8485#### `qsize()`8687Количество элементов в очереди.8889#### `task_done()`9091Указывает, что ранее поставленная в очередь задача завершена.9293Используется потребителями очереди. Для каждого вызова [`get()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.get), используемого для получения задачи, последующий вызов [`task_done()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.task_done) сообщает очереди, что обработка задачи завершена.9495Если [`join()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.join) в данный момент заблокировано, оно возобновит работу, когда все элементы будут обработаны (то есть для каждого элемента, который был [`put()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.put) в очередь, был получен вызов [`task_done()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.task_done)).9697Вызывает [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError), если был вызван больше раз, чем было элементов, помещённых в очередь.9899Новое в версии 3.4.4.100101#### `maxsize`102103Количество элементов, которое может содержать очередь.104105## 18.5.8.2. PriorityQueue106107#### `class asyncio.PriorityQueue`108109Подкласс [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue); извлекает записи в порядке приоритета (сначала наименьший).110111Записи обычно представляют собой кортежи вида: (номер приоритета, данные).112113## 18.5.8.3. LifoQueue114115#### `class asyncio.LifoQueue`116117Подкласс [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue), который извлекает первыми самые недавно добавленные записи.118119### 18.5.8.3.1. Исключения120121#### `exception asyncio.QueueEmpty`122123Исключение, вызываемое при вызове метода [`get_nowait()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.get_nowait) для пустого объекта [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue).124125#### `exception asyncio.QueueFull`126127Исключение, вызываемое при вызове метода [`put_nowait()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.put_nowait) для полного объекта [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue).128