여러 스레드가 데이터를 주고받을 때 일반 리스트에 append는 「대부분」 안전하지만 위험합니다.
queue.Queue는 스레드 안전한 FIFO 큐로, 「생산자-소비자 패턴」의 표준 도구입니다.
기본 사용.
import queue.
q = queue.Queue().
q.put(data) — 추가.
data = q.get() — 꺼내기(없으면 대기).
q.task_done() — 작업 완료 표시.
q.join() — 모든 작업 완료까지 대기.
생산자-소비자 패턴.
「생산자 스레드는 q.put으로 작업 추가, 여러 소비자 스레드는 q.get으로 받아 처리」.
작업량과 처리 속도가 자연스럽게 맞춰짐.
웹 크롤러·로그 처리·메시지 큐의 기본 구조.
변형.
PriorityQueue — 우선순위 기반.
LifoQueue — 스택 모양(LIFO).
maxsize 인자로 최대 크기 제한 → 가득 차면 put이 대기(역압력 효과).
메모리 폭주 방지에 유용.
프로세스 간은 multiprocessing.Queue.
queue.Queue는 같은 프로세스 안의 스레드용.
다른 프로세스끼리는 multiprocessing.Queue를 써야 합니다(직렬화·IPC 처리).
asyncio용은 asyncio.Queue.
한 줄 요약
queue.Queue는 스레드 안전 FIFO 큐, 생산자-소비자 패턴의 표준 도구.
PriorityQueue·LifoQueue 변형, maxsize로 역압력.
프로세스는 multiprocessing.Queue.
더 알아볼 것
- asyncio.Queue — async용
- 역압력(backpressure) 패턴
- Redis·RabbitMQ — 분산 큐