threading 모듈은 「하나의 프로세스 안에서 여러 흐름을 동시 진행」하는 표준 라이브러리입니다.
asyncio가 등장하기 전엔 IO 동시성의 주된 도구.
지금도 여전히 사용처가 있습니다.
기본 사용.
import threading.
def worker(n): print(f"thread {n}").
t = threading.Thread(target=worker, args=(1,)).
t.start() — 시작.
t.join() — 끝날 때까지 대기.
여러 스레드가 동시에 진행.
장점.
1) async/await 같은 코드 변경 없이 기존 동기 코드 그대로.
2) 하나의 메모리를 공유 — 데이터 전달 쉬움.
3) IO 바운드 작업에서 효과적.
GIL의 한계.
파이썬은 「Global Interpreter Lock」 때문에 한 시점에 하나의 스레드만 파이썬 바이트코드 실행.
즉 CPU 바운드 작업은 스레드 늘려도 빨라지지 않음.
CPU는 multiprocessing 필요.
동기화 도구.
threading.Lock — 동시 수정 방지.
threading.Event — 대기·신호.
threading.Queue — 스레드 간 안전한 데이터 전달.
멀티스레드는 데이터 경쟁 버그가 흔하니 「공유 자원 = 락」 원칙.
한 줄 요약
threading은 한 프로세스 안의 여러 흐름.
IO 바운드에 효과적이지만 GIL 때문에 CPU에는 무용.
Lock·Event·Queue로 동기화 필요.
더 알아볼 것
- GIL 우회 — multiprocessing
- Thread Pool — concurrent.futures
- Lock 오용 — 데드락