Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 병렬 처리 시작하기: multiprocessing 모듈 활용법

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()한다면, 세 프로세스가 실제로 병렬로 동시에 실행되는 것을 확인할 수 있습니다.