PL(Programming Language)/Python

[Python] Multiple arguments function에 병렬처리(Multiprocessing) 적용하기

탱젤 2021. 1. 14. 14:25

대용량 데이터 처리를 할 때, 병렬처리를 이용하면 연산 속도를 줄일 수 있다.

 

딥러닝 프레임워크인 tensorflow나 pytorch 등의 경우 학습 과정에서 병렬처리 기능을 제공하지만, python의 경우 따로 기능을 제공하지 않는다.

 

이 때 python의 multiprocessing 라이브러리를 이용할 수 있다.


1. 함수 인자가 1개인 경우 병렬처리

 

 

[Python] 파이썬 multiprocessing package로 데이터프레임병렬 처리하기

최근 대규모 데이터로 병렬처리가 많이 중요해졌다. 그리고 파이썬에는 병렬처리를 제공하는 패키지인 multiprocessing이 있다. 이번 포스팅은 multiprocessing 패키지를 이용해 cpu 코어 수만큼 병렬 처

ahnty0122.tistory.com

전에 썼던 글에 함수 인자가 1개인 경우 병렬처리를 할 수 있는 코드를 작성해두었다.

 

2. 함수 인자가 2개인 경우 병렬처리

 

  • pool.starmap에서 zip 으로 함수 인자 처리
import multiprocessing
from functools import partial
from contextlib import contextmanager

우선 필요한 모듈 임포트

# 필요없는 낭비 없애기 위해 pool terminate도 필요
@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()
    
# 사용자 함수 정의    
def printname(arg1, arg2):
	print(arg1, arg2)
    
if __name__ == '__main__':
    arg1 = ['1', '2', '3']
    arg2 = ['A', 'B', 'C']
    
    # processes는 cpu 코어 개수
    with poolcontext(processes = 16) as pool:
        result = pool.starmap(printname, zip(arg1, arg2))
    
    print(result)

위와 같은 형식으로 함수를 정의해 arg1, arg2 여러개의 인자에 대해 병렬처리를 적용할 수 있다.

 

결과

1 A
2 B
3 C

+++++ processes의 숫자를 정할 때, cpu 코어 개수를 확인해주면 좋다.

 

CPU 코어 수 확인

import multiprocessing as mp

num_cores = mp.cpu_count() # cpu 코어 수 반환

 

728x90