Study/Python
[Python] MultiProcessing vs MultiThreading
kimdaepa
2026. 6. 22. 11:44
Process
- 실행 중인 프로그램의 단위
- 프로그램은 CPU 자원을 할당 받아 프로세스가 됨
Thread
- 한 프로세스 내에서 동시에 진행될 수 있는 작업의 단위
Process vs Thread
- 프로세스는 독립적, 스레드는 종속적
- 프로세스는 자원 공유 X, 스레드는 자원 공유
- 프로세스는 비용이 많이 듬. 스레드는 상대적으로 적은 비용
MultiProcessing
- CPU 집약적인 작업, 계산이 많이 필요한 작업에 유용
from multiprocessing import Pool
import pandas as pd
def process_file(file_name):
data = pd.read_csv(file_name)
processed_data = data
return processed_data
if __name__ == '__main__':
files = ['file1.csv', 'file2.csv', 'file3.csv']
with Pool(processes=4) as pool:
results = pool.map(process_file, files)
- Pool 객체는 멀티 프로세싱 풀을 생성
- 이 풀은 여러 프로세스를 관리하며, 각 프로세스에 작업을 할당
- Pool.map 메소드는 함수를 병렬로 실행
MultiThreading
- 주로 I/O 바운드 작업에 적합
- 대량의 입출력, 파일 읽기/쓰기, 네트워크 통신 등을 필요로 하는 경우
- 이 경우, 프로그램은 대부분의 시간을 데이터를 읽거나 쓰기를 기다리며 보냄
- 이 때 CPU는 많은 시간 동안 아무 일도 하지 않음
- 한 스레드가 I/O 작업으로 대기 상태일 때 다른 스레드가 CPU를 사용하여 작업을 계속 진행할 수 있음
import threading
import requests
def fetch_data(url):
response = requests.get(url)
data = response.text
return data
urls = ['<http://example.com/data1>', '<http://example.com/data2>', '<http://example.com/data3>']
threads = []
for url in urls:
thread = threading.Thread(target=fetch_data, args=(url,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()