Python 프로그램이 서로 의존하지 않는 여러 개의 하위 작업으로 나눌 수 있다면, 전체 프로그램을 실행할 때 각 하위 작업을 동시에(병렬로) 실행할 수 있습니다. 이러한 개념을 Python에서 병렬 처리(Parallel Processing)라고 합니다.
multiprocessing 모듈이란?
Python의 multiprocessing 모듈은 메인 프로세스의 여러 자식 프로세스를 생성하여 이들이 병렬로 실행되도록 할 수 있는 강력한 도구입니다. 각 프로세스는 독립적인 메모리 공간을 가지므로, CPU 집약적인 작업에서 GIL(Global Interpreter Lock)의 제약 없이 멀티코어를 효과적으로 활용할 수 있습니다.
아래 예제에서는 프로세스를 초기화한 후 run 메서드를 사용해 여러 하위 프로세스를 실행합니다. 프로세스 ID를 출력문에 함께 사용하면 어떤 하위 프로세스가 실행 중인지 쉽게 확인할 수 있으며, sleep 메서드를 활용해 각 출력 사이에 약간의 지연을 두고 순차적으로 결과를 확인할 수 있습니다.
예제 코드
import multiprocessing
import time
class Process(multiprocessing.Process):
def __init__(self, id):
super(Process, self).__init__()
self.id = id
def run(self):
time.sleep(1)
print("Running process id: {}".format(self.id))
if __name__ == '__main__':
p = Process("a")
p.start()
p.join()
p = Process("b")
p.start()
p.join()
p = Process("c")
p.start()
p.join()코드 설명
- Process 클래스 정의:
multiprocessing.Process를 상속받아 커스텀 프로세스 클래스를 만듭니다. 생성자에서 프로세스 ID를 받아 저장합니다. - run 메서드: 프로세스가 시작될 때 실행되는 핵심 로직입니다. 여기서는 1초 대기 후 프로세스 ID를 출력합니다.
- start()와 join():
start()로 프로세스를 시작하고,join()으로 해당 프로세스가 종료될 때까지 기다린 후 다음 프로세스를 시작합니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Running process id: a Running process id: b Running process id: c
각 프로세스가 순차적으로 시작되어 종료를 기다린 후 다음 프로세스가 실행되므로, 결과도 a → b → c 순서로 출력됩니다. 만약 join() 호출 없이 세 프로세스를 연속해서 start()한다면, 세 프로세스가 실제로 병렬로 동시에 실행되는 것을 확인할 수 있습니다.