Logo
내 게시판 만들기
파이썬

threading — 스레드로 병렬 처리

구름이 | 2026.04.27 06:24:48
조회 8 | 추천 0

threading 모듈은 「하나의 프로그램 안에서 여러 스레드(가벼운 실행 단위)를 동시에 돌리는」 표준 라이브러리입니다.

I/O 작업(웹 요청·파일 읽기)을 동시에 처리하면 큰 속도 향상을 얻을 수 있습니다.



기본 사용.

import threading.

def worker(n): print(f"스레드 {n}").

t = threading.Thread(target=worker, args=(1,)); t.start(); t.join().

Thread 객체에 함수와 인자를 주고 start()로 실행, join()으로 끝날 때까지 대기.



동시 실행 예시.

urls = [...]; threads = [].

for url in urls: t = threading.Thread(target=download, args=(url,)); t.start(); threads.append(t).

for t in threads: t.join().

10개 URL을 동시에 다운로드하면 순차 다운로드보다 거의 10배 빠릅니다(I/O 병목인 경우).



GIL의 한계.

파이썬에는 「GIL(Global Interpreter Lock)」이 있어 「동시에 한 스레드만 파이썬 바이트코드를 실행」할 수 있습니다.

CPU 집약 작업(예: 큰 수학 계산)은 스레드로 빨라지지 않습니다.

I/O 대기 중에는 GIL이 해제되므로 I/O 작업은 효과적으로 병렬화됩니다.



동시성 문제 — 락(Lock).

여러 스레드가 같은 데이터를 동시에 수정하면 「경합 조건(race condition)」이 발생할 수 있습니다.

lock = threading.Lock(); with lock: shared_data.append(x).

with 블록 안에서만 한 스레드가 데이터를 변경하도록 보장.

동시성 프로그래밍의 가장 큰 함정이며, 신중한 설계가 필요합니다.




한 줄 요약


threading은 한 프로세스 안의 여러 스레드를 동시 실행합니다.

I/O 작업에 효과적이지만 GIL 때문에 CPU 집약 작업은 빨라지지 않습니다.

Lock으로 경합 조건 방지가 필요합니다.




더 알아볼 것


- concurrent.futures.ThreadPoolExecutor — 더 편한 인터페이스

- GIL의 작동 원리

- async/await — 스레드의 더 가벼운 대안

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
101 별님이 26/04/27 12 0
100 부엉이 26/04/27 10 0
99 다람쥐 26/04/27 13 0
98 야옹이 26/04/27 14 0
97 구름이 26/04/27 17 0
96 곰돌이 26/04/27 14 0
95 부엉이 26/04/27 8 0
94 햇살이 26/04/27 8 0
93 멍뭉이 26/04/27 9 0
92 별님이 26/04/27 11 0
91 다람쥐 26/04/27 9 0
90 부엉이 26/04/27 25 0
89 구름이 26/04/27 8 0
88 토순이 26/04/27 12 0
87 토순이 26/04/27 10 0
86 햇살이 26/04/27 9 0
85 구름이 26/04/27 12 0
84 햇살이 26/04/27 13 0
83 야옹이 26/04/27 16 0
82 너구리 26/04/27 11 0
81 햇살이 26/04/27 8 0
80 토순이 26/04/27 25 0
79 다람쥐 26/04/27 11 0
78 야옹이 26/04/27 9 0
77 부엉이 26/04/27 9 0
76 별님이 26/04/27 9 0
75 햇살이 26/04/27 14 0
74 곰돌이 26/04/27 9 0
73 구름이 26/04/27 11 0
72 햇살이 26/04/27 6 0
신고하기

신고 사유를 선택해 주세요.