1 분 소요

multiprocessing 모듈

multiprocessing 모듈을 이용하면 여러 개의 서로 독립적인 프로세스들을 하나의 프로그램 내에서 실행시킬 수 있다.

다음은 여러 개의 프로세스들을 생성하여 실행시키는 예제이다. 해당 예제를 터미널 창에서 실행시켜보자.

import multiprocessing
import os

def sub_func(thing):
    main_func(thing)

def main_func(thing):
    print("Process {} says: {}".format(os.getpid(), thing))

if __name__ == '__main__':
    main_func("메인 프로그램")
    for i in range(4):
        p = multiprocessing.Process(target=sub_func, args=("서브 프로그램 {}".format(i),))
        p.start()

터미널 창에 다음을 입력한다

python study.py

그러면 실행결과는 다음과 같다.

Process 16520 says: 메인 프로그램
Process 10308 says: 서브 프로그램 0
Process 16452 says: 서브 프로그램 1
Process 2788 says: 서브 프로그램 2
Process 12948 says: 서브 프로그램 3

Process() 함수가 새로운 프로세스를 생성하여 sub_func() 함수를 실행시킨 것이다. 여기서는 for 루프문 안에 4번의 새로운 프로세스를 생성시켰으므로, sub_func() 함수를 실행하고 종료되는 프로세스를 4개 만든 것이다.

해당 모듈은 실행 시간을 줄이기 위해 특정 일들을 여러 프로세스들에게 맡길 때 쓰인다. 해당 모듈에는 일들을 queue로 만드는 방법과, 프로세스들 간에 소통하는 방법, 그리고 모든 프로세스들이 끝날 때까지 기다리는 방법 등 여러 가지를 포함하고 있다.

terminate()로 프로세스 종료시키기

여러 개의 프로세스를 생성시키고 실행시키다가 어떠한 이유로 종료시키고자 할 때 terminate()를 쓰면 된다.

다음 예제는 큰 숫자까지 1부터 차례대로 카운트하는 함수를 프로세스에서 실행시키다가 5초만에 해당 프로세스를 종료시키는 예제이다.

import multiprocessing
import os
import time

def sub_func(thing):
    main_func(thing)
    start_num = 1
    stop = 100000
    for num in range(start_num, stop):
        print("\tNumber {} of {}.".format(num, stop))
        time.sleep(1)

def main_func(thing):
    print("Process {} says: {}".format(os.getpid(), thing))

if __name__ == '__main__':
    main_func("메인 프로그램")
    p = multiprocessing.Process(target=sub_func, args=("loop",))
    p.start()
    time.sleep(5)
    p.terminate()
Process 10540 says: 메인 프로그램
Process 16692 says: loop
        Number 1 of 100000.
        Number 2 of 100000.
        Number 3 of 100000.
        Number 4 of 100000.
        Number 5 of 100000.

Reference

[1] Bill Lubannovic, “Introducing Python” (O’REILLY, 2015)

This content is licensed under CC BY-NC 4.0

댓글남기기