> **Источник:** https://python-all.ru/3.5/library/asyncio-queue.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 18.5.8. Очереди

Очереди:

- [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue)
- [`PriorityQueue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.PriorityQueue)
- [`LifoQueue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.LifoQueue)

API очередей 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) может быть использована для отмены задачи по истечении времени ожидания.

## 18.5.8.1. Очередь

#### `class asyncio.Queue(maxsize=0, *, loop=None)`

Очередь, полезная для координации корутин производителя и потребителя.

Если *maxsize* меньше или равен нулю, размер очереди бесконечен. Если это целое число больше `0`, то `yield from put()` будет блокироваться, когда очередь достигнет *maxsize*, пока элемент не будет удалён с помощью [`get()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.get).

В отличие от [`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) и выполнением операции над очередью.

This class is [не является потокобезопасным](https://python-all.ru/3.5/library/asyncio-dev.html#asyncio-multithreading).

Изменено в версии 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).

#### `empty()`

Возвращает `True`, если очередь пуста, иначе `False`.

#### `full()`

Возвращает `True`, если в очереди [`maxsize`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.maxsize) элементов.

> **Примечание**
>
> Если очередь была инициализирована с `maxsize=0` (по умолчанию), то [`full()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.full) никогда не `True`.

#### `coroutine get()`

Удаляет и возвращает элемент из очереди. Если очередь пуста, ожидает, пока элемент не станет доступен.

Этот метод является [корутиной](https://python-all.ru/3.5/library/asyncio-task.html#coroutine).

> **См. также**
>
> Метод [`empty()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.empty).

#### `get_nowait()`

Извлекает и возвращает элемент из очереди.

Возвращает элемент, если он доступен немедленно, в противном случае вызывает [`QueueEmpty`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.QueueEmpty).

#### `coroutine join()`

Блокируется до тех пор, пока все элементы в очереди не будут извлечены и обработаны.

Счётчик незавершённых задач увеличивается всякий раз, когда элемент добавляется в очередь. Счётчик уменьшается, когда поток-потребитель вызывает [`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) разблокируется.

Этот метод является [корутиной](https://python-all.ru/3.5/library/asyncio-task.html#coroutine).

Новое в версии 3.4.4.

#### `coroutine put(item)`

Помещает элемент в очередь. Если очередь полна, ожидает освобождения места, прежде чем добавить элемент.

Этот метод является [корутиной](https://python-all.ru/3.5/library/asyncio-task.html#coroutine).

> **См. также**
>
> Метод [`full()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.full).

#### `put_nowait(item)`

Помещает элемент в очередь без блокировки.

Если свободный слот недоступен сразу, возбуждается исключение [`QueueFull`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.QueueFull).

#### `qsize()`

Количество элементов в очереди.

#### `task_done()`

Указывает, что ранее поставленная в очередь задача завершена.

Используется потребителями очереди. Для каждого вызова [`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) сообщает очереди, что обработка задачи завершена.

Если [`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)).

Вызывает [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError), если был вызван больше раз, чем было элементов, помещённых в очередь.

Новое в версии 3.4.4.

#### `maxsize`

Количество элементов, которое может содержать очередь.

## 18.5.8.2. PriorityQueue

#### `class asyncio.PriorityQueue`

Подкласс [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue); извлекает записи в порядке приоритета (сначала наименьший).

Записи обычно представляют собой кортежи вида: (номер приоритета, данные).

## 18.5.8.3. LifoQueue

#### `class asyncio.LifoQueue`

Подкласс [`Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue), который извлекает первыми самые недавно добавленные записи.

### 18.5.8.3.1. Исключения

#### `exception asyncio.QueueEmpty`

Исключение, вызываемое при вызове метода [`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).

#### `exception asyncio.QueueFull`

Исключение, вызываемое при вызове метода [`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).
