queue 모듈은 「여러 스레드가 안전하게 데이터를 주고받을 수 있는 큐 자료구조」를 제공합니다.
threading과 함께 자주 쓰이며, 「프로듀서-컨슈머」 패턴의 표준입니다.
Queue — FIFO 큐(가장 흔함).
import queue.
q = queue.Queue().
q.put(item) — 추가.
q.get() — 꺼내기.
자동으로 락이 처리되어 여러 스레드가 동시에 put/get해도 안전.
변형들.
LifoQueue — 스택(LIFO).
PriorityQueue — 우선순위 큐(낮은 값이 먼저).
SimpleQueue(3.7+) — 더 가벼운 FIFO 큐(maxsize·task_done 같은 기능 없음).
프로듀서-컨슈머 패턴.
한 스레드가 작업을 큐에 넣고(put), 다른 스레드들이 큐에서 꺼내(get) 처리하는 패턴.
워크로드를 자연스럽게 분산시키며, 큐가 동기화를 담당해 락 코드를 직접 짤 필요가 없습니다.
주요 옵션.
q.put(item, block=True, timeout=5) — 5초 안에 큐에 자리 안 나면 예외.
q.get(block=False) — 큐가 비어 있으면 즉시 예외(폴링용).
큐가 비었는지 isinstance 검사보다 try/except로 처리하는 게 표준입니다.
또 q.task_done()과 q.join()으로 「모든 작업 완료까지 대기」 패턴도 쉽게 구현됩니다.
한 줄 요약
queue 모듈은 스레드 안전 큐를 제공합니다.
Queue(FIFO)·LifoQueue·PriorityQueue가 있고, 프로듀서-컨슈머 패턴의 표준입니다.
자동 락 처리가 큰 매력입니다.
더 알아볼 것
- multiprocessing.Queue — 프로세스 간 큐
- asyncio.Queue — 비동기 큐
- work-stealing 패턴