Python - MultiProcessing

mkhome·2021년 7월 22일
0

파이썬

목록 보기
3/3
post-thumbnail
  • AI 사업을 위해 현재 사내 데이터를 전처리하며 경도, 위도를 변환하는 작업이 있었는데 해당 작업이 시간이 굉장히 오래 걸렸고 맥북으로 하다간 3일 밤낮을 켜놔야할 느낌이 강하게 들어 python의 multiprocessing을 이용했다.

MultiProcessing이란?

  • 이름에서 느껴지듯이 오랜시간이 걸리는 작업을 병렬화 작업을 통해 진행하는 것을 의미함.

  • 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를 많이 만났고 라이브러리 버전을 낮춰주니 정상적으로 작동했다..

0개의 댓글