[python] 파이썬에서의 멀티스레딩과 멀티프로세싱의 사용 사례
파이썬은 다양한 방법으로 concurrency(동시성) 또는 parallelism(병렬성) 을 지원합니다. 이 글에서는 파이썬에서의 멀티스레딩과 멀티프로세싱에 대해 알아보겠습니다. 또한, 어떤 상황에서 어떤 방식을 사용해야 하는지에 대해 알아볼 것입니다.
멀티스레딩 (Multithreading)
파이썬에서 멀티스레딩은 threading 모듈을 사용하여 구현할 수 있습니다. 멀티스레딩은 여러 작업을 동시에 처리하는 데 적합하며, I/O 바운드 작업에 적합합니다. 예를 들어, 네트워크 요청을 처리하거나 파일을 읽고 쓰는 작업 등이 있습니다.
다음은 파이썬에서의 멀티스레딩 사용 예제입니다.
import threading
def some_function():
# do some work
# 스레드 생성
t1 = threading.Thread(target=some_function)
t2 = threading.Thread(target=some_function)
# 스레드 시작
t1.start()
t2.start()
# 모든 스레드가 끝날 때까지 기다림
t1.join()
t2.join()
멀티프로세싱 (Multiprocessing)
멀티프로세싱은 multiprocessing 모듈을 사용하여 구현할 수 있습니다. 멀티프로세싱은 CPU 바운드 작업에 적합하며, 여러 프로세스가 독립적으로 실행됩니다.
다음은 파이썬에서의 멀티프로세싱 사용 예제입니다.
from multiprocessing import Process
def some_function():
# do some work
# 프로세스 생성
p1 = Process(target=some_function)
p2 = Process(target=some_function)
# 프로세스 시작
p1.start()
p2.start()
# 모든 프로세스가 끝날 때까지 기다림
p1.join()
p2.join()
어떤 상황에서 어떤 방식을 사용해야 하는가?
- 멀티스레딩은 I/O 바운드 작업에 적합하며, 멀티프로세싱은 CPU 바운드 작업에 적합합니다.
- GIL (Global Interpreter Lock) 이 있는 파이썬에서는 멀티스레딩보다 멀티프로세싱을 사용하는 편이 안전합니다.
- 코드가 CPU 바운드 작업과 I/O 바운드 작업 둘 다 포함하고 있다면,
concurrent.futures
모듈을 사용하여 작업을 조율할 수 있습니다.
결론
파이썬에서 멀티스레딩과 멀티프로세싱은 각자의 장단점을 가지고 있으며, 어떤 상황에서 어느 방식을 사용해야 하는지를 이해하면 최적의 성능을 얻을 수 있습니다. 적합한 방법을 선택하여 프로그램을 효과적으로 개발하세요.
참고 자료
- 파이썬 공식 문서: Threading, Multiprocessing
- Fluent Python - Chapter 17: Concurrency with
concurrent.futures