보통 수천~수만건의 API를 호출하거나 많은 양의 반복문을 처리할 때는 multiprocessing에서 pool.map() 함수를 활용한다.
cpu worker의 개수에 맞게 processess 파라미터를 입력해준 후 속도를 향상 시킬 수 있다.
예제) pool.map() 함수를 활용한 멀티프로세싱
import time
import datetime
from multiprocessing import Poolstart = 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가 생기며 아래와 같이 완료시 몇 분이 걸렸고, 병렬 처리를 진행중에는 얼마정도의 프로세스가 완료되었는지 가시적으로 볼 수 있다.