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

asyncio-queue.md

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

1> **Источник:** https://python-all.ru/3.6/library/asyncio-queue.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 18.5.8. Очереди89**Исходный код:** [Lib/asyncio/queues.py](https://python-all.ru/src/3.6/Lib/asyncio/queues.py)1011Очереди:1213- [`Queue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue)14- [`PriorityQueue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.PriorityQueue)15- [`LifoQueue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.LifoQueue)1617API очередей asyncio было разработано так, чтобы быть близким к классам модуля [`queue`](https://python-all.ru/3.6/library/queue.html#module-queue) ([`Queue`](https://python-all.ru/3.6/library/queue.html#queue.Queue), [`PriorityQueue`](https://python-all.ru/3.6/library/queue.html#queue.PriorityQueue), [`LifoQueue`](https://python-all.ru/3.6/library/queue.html#queue.LifoQueue)), но в нём отсутствует параметр *timeout*. Функция [`asyncio.wait_for()`](https://python-all.ru/3.6/library/asyncio-task.html#asyncio.wait_for) может быть использована для отмены задачи по истечении времени ожидания.1819## 18.5.8.1. Очередь2021#### `class asyncio.Queue(maxsize=0, *, loop=None)`2223Очередь, полезная для координации корутин производителя и потребителя.2425Если *maxsize* меньше или равен нулю, размер очереди бесконечен. Если это целое число больше `0`, то `yield from put()` будет блокироваться, когда очередь достигнет *maxsize*, пока элемент не будет удалён с помощью [`get()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.get).2627В отличие от [`queue`](https://python-all.ru/3.6/library/queue.html#module-queue) из стандартной библиотеки, размер этой очереди можно надёжно узнать с помощью [`qsize()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.qsize), так как однопоточное приложение asyncio не будет прервано между вызовом [`qsize()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.qsize) и выполнением операции над очередью.2829This class is [не является потокобезопасным](https://python-all.ru/3.6/library/asyncio-dev.html#asyncio-multithreading).3031Изменено в версии 3.4.4: Новые методы [`join()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.join) и [`task_done()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.task_done).3233#### `empty()`3435Возвращает `True`, если очередь пуста, иначе `False`.3637#### `full()`3839Возвращает `True`, если в очереди [`maxsize`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.maxsize) элементов.4041> **Примечание**42>43> Если очередь была инициализирована с `maxsize=0` (по умолчанию), то [`full()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.full) никогда не `True`.4445#### `coroutine get()`4647Удаляет и возвращает элемент из очереди. Если очередь пуста, ожидает, пока элемент не станет доступен.4849Этот метод является [корутиной](https://python-all.ru/3.6/library/asyncio-task.html#coroutine).5051> **См. также**52>53> Метод [`empty()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.empty).5455#### `get_nowait()`5657Извлекает и возвращает элемент из очереди.5859Возвращает элемент, если он доступен немедленно, в противном случае вызывает [`QueueEmpty`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.QueueEmpty).6061#### `coroutine join()`6263Блокируется до тех пор, пока все элементы в очереди не будут извлечены и обработаны.6465Счётчик незавершённых задач увеличивается всякий раз, когда элемент добавляется в очередь. Счётчик уменьшается, когда поток-потребитель вызывает [`task_done()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.task_done), чтобы указать, что элемент был получен и вся работа над ним завершена. Когда счётчик незавершённых задач становится равным нулю, [`join()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.join) разблокируется.6667Этот метод является [корутиной](https://python-all.ru/3.6/library/asyncio-task.html#coroutine).6869Новое в версии 3.4.4.7071#### `coroutine put(item)`7273Помещает элемент в очередь. Если очередь полна, ожидает освобождения места, прежде чем добавить элемент.7475Этот метод является [корутиной](https://python-all.ru/3.6/library/asyncio-task.html#coroutine).7677> **См. также**78>79> Метод [`full()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.full).8081#### `put_nowait(item)`8283Помещает элемент в очередь без блокировки.8485Если свободный слот недоступен сразу, возбуждается исключение [`QueueFull`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.QueueFull).8687#### `qsize()`8889Количество элементов в очереди.9091#### `task_done()`9293Указывает, что ранее поставленная в очередь задача завершена.9495Используется потребителями очереди. Для каждого вызова [`get()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.get), используемого для получения задачи, последующий вызов [`task_done()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.task_done) сообщает очереди, что обработка задачи завершена.9697Если [`join()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.join) в данный момент заблокировано, оно возобновит работу, когда все элементы будут обработаны (то есть для каждого элемента, который был [`put()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.put) в очередь, был получен вызов [`task_done()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.task_done)).9899Вызывает [`ValueError`](https://python-all.ru/3.6/library/exceptions.html#ValueError), если был вызван больше раз, чем было элементов, помещённых в очередь.100101Новое в версии 3.4.4.102103#### `maxsize`104105Количество элементов, которое может содержать очередь.106107## 18.5.8.2. PriorityQueue108109#### `class asyncio.PriorityQueue`110111Подкласс [`Queue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue); извлекает записи в порядке приоритета (сначала наименьший).112113Записи обычно представляют собой кортежи вида: (номер приоритета, данные).114115## 18.5.8.3. LifoQueue116117#### `class asyncio.LifoQueue`118119Подкласс [`Queue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue), который извлекает первыми самые недавно добавленные записи.120121### 18.5.8.3.1. Исключения122123#### `exception asyncio.QueueEmpty`124125Исключение, вызываемое при вызове метода [`get_nowait()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.get_nowait) для пустого объекта [`Queue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue).126127#### `exception asyncio.QueueFull`128129Исключение, вызываемое при вызове метода [`put_nowait()`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue.put_nowait) для полного объекта [`Queue`](https://python-all.ru/3.6/library/asyncio-queue.html#asyncio.Queue).130