все 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Сообщить о неточности