파이썬 Multiprocessing + tqdm 활용

John
3 min readDec 6, 2020

--

보통 수천~수만건의 API를 호출하거나 많은 양의 반복문을 처리할 때는 multiprocessing에서 pool.map() 함수를 활용한다.

cpu worker의 개수에 맞게 processess 파라미터를 입력해준 후 속도를 향상 시킬 수 있다.

예제) pool.map() 함수를 활용한 멀티프로세싱

import time
import datetime
from multiprocessing import Pool
start = time.time()pool = Pool(processes='활용 가능한 CPU 코어수')
result = pool.map(정의된 함수, 병렬처리할 input 값)
pool.close()
pool.join()
sec = time.time() - start
times = str(datetime.timedelta(seconds=sec)).split(".")
times = times[0]
print(times)
  • 해당 방법을 통해서 효율적으로 병렬처리를 할 수 있다.
    하지만, 얼마만큼의 시간이 소요되는지 progress bar를 보여주는 tqdm과의 연동이 굉장히.. 매우.. 불편한 편이고 코드가 길어지는 문제가 있었다.

parmap 활용

  • 설치
!pip install parmap

위에 나열했던 문제점을 해결할 수 있는 라이브러리다. 병렬 처리를 진행하면서 얼마만큼으 프로세스 시간이 남았는지 확인이 가능하고 진행상황을 볼 수 있도록 progress bar를 제공한다. (기본적인 성능은 pool.map() 함수와 동일)

  • 예시
import parmapresult = parmap.map(정의된 함수, 병렬처리할 input 값, pm_pbar=True, pm_processes='활용 가능한 CPU 코어수')

-> 해당 코드에서 pm_pbar=True로 설정을 해주면 progress bar가 생기며 아래와 같이 완료시 몇 분이 걸렸고, 병렬 처리를 진행중에는 얼마정도의 프로세스가 완료되었는지 가시적으로 볼 수 있다.

참고

--

--