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()