이름에서 느껴지듯이 오랜시간이 걸리는 작업을 병렬화 작업을 통해 진행하는 것을 의미함.
Python은 thread는 GIL(Global Interpreter Lock)을 따르고 있기에 한 쓰레드에서 작업을 하는 동안 다른 쓰레드에서 작업이 멈춰있음
MultiProcessing은 threading 모듈과 유사한 API를 사용하여 프로세스 스포닝(spawning)을 지원하는 패키지입니다.(Python 공식문서)
결국 요즘 컴퓨터들의 CPU 코어, 쓰레드가 좋다해도 GIL로 인해 제한이 있고 이를 우회적으로 해결할 수 있는 것
오늘 사용한 것은 Pool : Pool 객체는 여러 입력 값에 걸쳐 함수의 실행을 병렬 처리하고 입력 데이터를 프로세스에 분산시키는 편리한 방법을 제공합니다(데이터 병렬 처리).
이를 통해 간단하게 사용 가능!
난 csv를 np.array_split으로 나눈뒤 (less than core_number) pool 객체를 만들었다. // 사내 워크스테이션을 사용했기에 코어 수를 15로 설정 (지금 돌리는 작업이 어렵다기보단 라이브러리 자체가 시간이 오래걸리는 작업이라 워크스테이션 사용중)
이후엔 func라는 함수(작업을 진행하는)를 만들고 나눈 df_split과 map으로 묶은 뒤 마지막에 나눈 dataframe을 합치는 concat을 통해 합친다.
이후 차례대로 close, join을 호출해서 작업을 종료
// 생각해보니 리눅스에서 작업을 위해 환경설정을 하면서 pip Error를 많이 만났고 라이브러리 버전을 낮춰주니 정상적으로 작동했다..