본문 바로가기

Programming/Python Program

왜 파이썬에서 멀티 프로세스를 사용하는가? | Why do we use multiprocess in python?

파이썬에서 멀티 쓰레드(Multi Thread)와 멀티 프로세스(Multi Process)를 사용하는 경우가 종종 있다. 그런데 왜 이런 모듈을 사용할까? 이유는 간단하다. 동일한 작업과정을 단시간에 효율적으로 처리하기 위해서다. 

아래는 주식 분석 코드의 일부분만을 발췌해 보았다. Stock() 이라는 클래스를 정의하고 그 처리하는 과정과 처리하는데 소요된 시간을 표기하였다.


코스피, 코스닥 종목이 현 시점에서 도합 2,000 여 종목이 된다. 이를 하나씩 읽어들여 DB에 저장된 값으로 분석을 할 수도 있고, 인터넷이 연결되어 있다면 바로 주식 데이터를 다운받아 처리할 수도 있다. 이 중 하나의 방식으로 전 상장종목을 처리해 보았다.

대략 3822초가 소요되었다. 그러니까 1시간하고 약 4분 정도 걸린셈이다. 하나~ 하나씩 처리를 한 결과이다.

그럼 동일한 코드를 멀티 프로세스(Multi Process)를 사용해서 처리해 보자.

아래는 코드의 실행부에 해당한다. 코스피에 8개 코스닥에 13개의 프로세스를 할당해서 처리를 하게 하였다.

과연 얼마나 걸릴까?

이미지를 분리하지 않아 결과값이 함께 떠 버렸다 -_-;; 결과는 허무하게 170초. 3분이 채 걸리지 않은 것이다. 

64분 VS 3분

위 결과에서도 알 수 있듯이 비약적인 처리속도라고 할 수 있다. 그렇다면 무조건 process 혹은 thread  갯수를 높여주는게 상책일까? 그렇지는 않다. 각자가 보유하고 있는 컴퓨터 자원에 맞게끔 적당한 process, thread 갯수가 가장 효율적이다.

아래 이미지는 인터넷에서 구한 병렬 처리를 할 때 process 의 갯수 대비 효율성에 관한 그래프이다. 아래에서 보듯이 이상적인 값(RED)은 1차 함수처럼 process 갯수가 증가하면 효율성도 증가하는 것이다. 그러나 그렇지 않은게 현실이다.

process의 갯수가 증가하면 증가할 수록 각각의 process 가 처리하는 효율은 Exponential 하게 감소하는 것을 알 수 있다. 컴퓨터 자원이 풍부하다면 초록색 그래프는 보다 높은 곳에서 떨어진다는 차이뿐이라 하겠다.