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

---

# 18.5.8. Очереди

Очереди:

- [`Очередь`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.Queue)
- [`PriorityQueue`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.PriorityQueue)
- [`LifoQueue`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.LifoQueue)
- [`JoinableQueue`](https://python-all.ru/3.4/library/asyncio-queue.html#asyncio.JoinableQueue)

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

## 18.5.8.1. Очередь

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

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

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

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

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

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

#### `empty()`

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

#### `full()`

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

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

#### `coroutine get()`

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

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

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

#### `get_nowait()`

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

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

#### `coroutine join()`

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

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

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

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

#### `coroutine put(item)`

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

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

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

#### `put_nowait(item)`

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

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

#### `qsize()`

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

#### `task_done()`

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

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

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

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

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

#### `maxsize`

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

## 18.5.8.2. PriorityQueue

#### `class asyncio.PriorityQueue`

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

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

## 18.5.8.3. LifoQueue

#### `class asyncio.LifoQueue`

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

### 18.5.8.3.1. JoinableQueue

#### `class asyncio.JoinableQueue`

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

Устарело с версии 3.4.4.

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

#### `exception asyncio.QueueEmpty`

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

#### `exception asyncio.QueueFull`

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