Python Glossary English

все Python 3queueпонятие

queue.Queue

очереди

Потокобезопасная очередь FIFO для обмена данными между потоками, с блокирующими put() и get().

Синтаксис

q = queue.Queue(maxsize=0); q.put(item); q.get(block=True, timeout=None); q.task_done(); q.join()

get() без аргументов ждёт вечно, если очередь пуста: в однопоточном коде это зависание, а не ошибка. Для обычной очереди внутри одного потока быстрее collections.deque, а для корутин — asyncio.Queue. join() ждёт, пока на каждый полученный элемент не вызван task_done(); забытый task_done() — тоже вечное ожидание.

Примеры

import queue, threading
q = queue.Queue()
def worker():
    while (item := q.get()) is not None:
        print('got', item)
        q.task_done()
    q.task_done()
t = threading.Thread(target=worker)
t.start()
for i in range(2):
    q.put(i)
q.put(None)
q.join()
# → got 0 / got 1
import queue
q = queue.Queue()
try:
    q.get(timeout=0.1)
except queue.Empty:
    print('пусто')  # → пусто

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности