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

asyncio-queue.md

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

1> **Источник:** https://python-all.ru/3.4/library/asyncio-queue.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 18.5.8. Очереди89Очереди:1011- [`Очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue)12- [`PriorityQueue`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.PriorityQueue)13- [`LifoQueue`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.LifoQueue)14- [`JoinableQueue`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.JoinableQueue)1516API очередей asyncio был спроектирован так, чтобы быть близким к классам модуля [`очередь`](https://python-all.ru/3.4/library/queue.html#module-queue) ([`Очередь`](https://python-all.ru/3.4/library/queue.html#queue.Queue), [`PriorityQueue`](https://python-all.ru/3.4/library/queue.html#queue.PriorityQueue), [`LifoQueue`](https://python-all.ru/3.4/library/queue.html#queue.LifoQueue)), но у него нет параметра *тайм-аута*. Функцию [`asyncio.wait_for()`](https://python-all.ru/3.4/library/asyncio-task.html#asyncio.wait_for) можно использовать для отмены задачи по истечении тайм-аута.1718## 18.5.8.1. Очередь1920#### `class asyncio.Queue(maxsize=0, *, loop=None)`2122Очередь, полезная для координации корутин производителя и потребителя.2324Если *maxsize* меньше или равен нулю, размер очереди бесконечен. Если он – целое число больше `0`, то `yield from put()` будет блокироваться, когда очередь достигнет *maxsize*, пока элемент не будет извлечён с помощью [`get()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.get).2526В отличие от модуля [`очередь`](https://python-all.ru/3.4/library/queue.html#module-queue) стандартной библиотеки, размер этой очереди можно точно узнать с помощью [`qsize()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.qsize), так как однопоточное приложение asyncio не будет прервано между вызовом [`qsize()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.qsize) и выполнением операции над очередью.2728This class is [*не является потокобезопасным*](https://python-all.ru/3.4/library/asyncio-dev.html#asyncio-multithreading).2930Изменено в версии 3.4.4: Новые методы [`join()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.join) и [`task_done()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.task_done).3132#### `empty()`3334Возвращает `True`, если очередь пуста, и `False` в противном случае.3536#### `full()`3738Возвращает `True`, если в очереди находится [`maxsize`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.maxsize) элементов.3940> **Примечание**41>42> Если очередь была инициализирована с `maxsize=0` (по умолчанию), то [`full()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.full) никогда не возвращает `True`.4344#### `coroutine get()`4546Удаляет и возвращает элемент из очереди. Если очередь пуста, ожидает, пока элемент не станет доступен.4748Этот метод является [*корутиной*](https://python-all.ru/3.4/library/asyncio-task.html#coroutine).4950> **См. также**51>52> Метод [`empty()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.empty).5354#### `get_nowait()`5556Извлекает и возвращает элемент из очереди.5758Возвращает элемент, если он доступен немедленно, в противном случае возбуждает [`QueueEmpty`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.QueueEmpty).5960#### `coroutine join()`6162Блокируется до тех пор, пока все элементы в очереди не будут извлечены и обработаны.6364Счётчик незавершённых задач увеличивается при каждом добавлении элемента в очередь. Счётчик уменьшается, когда поток-потребитель вызывает [`task_done()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.task_done), чтобы указать, что элемент извлечён и вся работа над ним завершена. Когда счётчик незавершённых задач падает до нуля, [`join()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.join) разблокируется.6566Этот метод является [*корутиной*](https://python-all.ru/3.4/library/asyncio-task.html#coroutine).6768Новое в версии 3.4.4.6970#### `coroutine put(item)`7172Помещает элемент в очередь. Если очередь полна, ожидает освобождения места, прежде чем добавить элемент.7374Этот метод является [*корутиной*](https://python-all.ru/3.4/library/asyncio-task.html#coroutine).7576> **См. также**77>78> Метод [`full()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.full).7980#### `put_nowait(item)`8182Помещает элемент в очередь без блокировки.8384Если свободный слот недоступен немедленно, возбуждает [`QueueFull`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.QueueFull).8586#### `qsize()`8788Количество элементов в очереди.8990#### `task_done()`9192Указывает, что ранее поставленная в очередь задача завершена.9394Используется потребителями очереди. Для каждого [`get()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.get), который используется для получения задачи, последующий вызов [`task_done()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.task_done) сообщает очереди, что обработка задачи завершена.9596Если [`join()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.join) в данный момент блокируется, он возобновит работу, когда все элементы будут обработаны (то есть для каждого элемента, который был помещён в очередь с помощью [`put()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.put), будет получен вызов [`task_done()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.task_done)).9798Возбуждает [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError), если был вызван больше раз, чем было помещено элементов в очередь.99100Новое в версии 3.4.4.101102#### `maxsize`103104Количество элементов, которое может содержать очередь.105106## 18.5.8.2. PriorityQueue107108#### `class asyncio.PriorityQueue`109110Подкласс [`очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue); извлекает записи в порядке приоритета (сначала наименьший).111112Записи обычно представляют собой кортежи вида: (номер приоритета, данные).113114## 18.5.8.3. LifoQueue115116#### `class asyncio.LifoQueue`117118Подкласс [`очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue); извлекает записи, добавленные последними, сначала.119120### 18.5.8.3.1. JoinableQueue121122#### `class asyncio.JoinableQueue`123124Устаревший псевдоним для [`очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue).125126Устарело с версии 3.4.4.127128### 18.5.8.3.2. Исключения129130#### `exception asyncio.QueueEmpty`131132Исключение возникает, когда метод [`get_nowait()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.get_nowait) вызывается на объекте [`очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue), который пуст.133134#### `exception asyncio.QueueFull`135136Исключение возникает, когда метод [`put_nowait()`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue.put_nowait) вызывается на объекте [`очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue), который заполнен.137