파이썬(Python) Multiprocessing - Pool
멀티 프로세싱을 활용하면 복잡하고 시간이 걸리는 작업을 별도의 프로세스를 생성 후 병렬처리해서
보다 빠른 응답처리 속도를 기대할 수 있는 장점이 있습니다.
최근들어 대용량의 빅데이터의 분석 및 예측 등의 머신러닝을 지원하는 다양한 패키지에서 대부분 멀티 프로세싱을 활용해서 멀티코어의 CPU의 장점을 극대화하고 빠른 처리를 지원하고 있습니다.
다만, 충분한 사전 지식 및 병렬 프로그래밍의 이해 없이 코드를 작성한다면, 싱글 프로세스의 응답속도보다 시간이 지연되고 별도로 예상치 못한 결과가 나타날 수 있으니 프로세스 및 쓰레드 등의 지식이 중요합니다.
또한, 멀티프로세싱은 오버헤드의 증가 및 메모리 사용률이 높아지는 단점도 존재합니다
파이썬(Python) MultiProcessing - 구조
보통 Multiprocessing 실행 흐름은 아래와 같이 나타낼 수 있으며, 관련 예제는 하단에서 설명합니다.
출처 : https://sebastianraschka.com/Articles/2014_multiprocessing.html
밑의 코드는 각각의 이미지들을 crop하고 저장하는것을 multiprocessing으로 구현했습니다. 서버에서는 cpu코어가 많아서 20~30로 줬었는데 process가 진행하다가 디렉토리에서 다른 디렉토리로 넘어갈 때 멈추는 현상이 있었습니다. python 정책에 의해서 인지 다른 프로세스가 끝나서 그런지 아니면 서버에서 다른 작업을 진행하느라 그것을 기다리느라 오래 걸린 것인지(프로세스의 경우 우선 순위에 따라서 진행되는걸로 알고 있습니다.) 정확한 이유는 알 수 없습니다. 추후 이 부분에 대해서는 추가로 작성하는걸로....(이걸로 대략 3.5TB의 이미지를 처리 했었다.)