Language/Python

[python] joblib을 이용하여 멀티프로세싱(multi processing) 적용하기

향식이 2022. 7. 28. 16:02

오늘은 joblib 라이브러리로 멀티프로세싱 하는 방법을 알아보자.

멀티프로세싱 예제 코드를 검색하면 대부분 import multiprocessing로 작성하는 예제가 나오는데 필자는 joblib으로 코드를 익혀서 joblib이 더 익숙하다.

개인적으로 joblib의 멀티프로세싱 더 코드가 깔끔한 거 같기도 ㅎㅎ

항상 코드를 작성할 땐 사용자가 선택 할 수 있도록 작성하는 것이 좋은 코드라고 생각하기 때문에 이번에도 멀티프로세싱의 사용 여부를 선택할 수 있도록 해주었다.  

 

from joblib import Parallel, delayed
import os

# multi processing option
USE_MULTIPROCESS = True

def make_filelist(filepath):
    # 병렬로 처리하고자 하는 작업 (예시)
    newname = filepath.replace(r'sicu', 'micu')
    os.rename(filepath, newname)
    
if __name__ == '__main__':
    # 처리하고자 하는 전체 데이터를 list(혹은 set)로 불러오기 (예시) 
    todo_path_list = set()
    for rootdir, dirs, files in os.walk(FILES_DIR):
        for filename in files:
            if filename.endswith('.vital'):
                todo_path_list.add(os.path.join(rootdir, filename))
    
    # multi process를 사용하는 경우
    if USE_MULTIPROCESS:
        Parallel(os.cpu_count())(delayed(make_filelist)(filepath) for filepath in todo_path_list)
    # multi process를 사용하지 않을 경우
    else:
        for filepath in todo_path_list: make_filelist(filepath)

 

필자가 작성한 코드 중 멀티프로세싱과 관련된 부분만 가지고 왔는데 예시 부분과 변수명을 적절히 수정하면 오류 없이 멀티프로세싱의 신세계를 맛 볼 수 있을 것이다. (엄청난 시간단축ㅇㅇ..)

 

그러나 병렬 프로그래밍의 이해 없이 코드를 작성할 경우, 싱글 프로스세보다 더 느리거나 예상하지 못한 결과가 나올 수 있으니 디버깅을 꼭꼭 하면서 작성하기 약또옥!!

 

다음에는 각 프로세스의 결과값을 저장하여 멀티프로세싱 이후 그 결과값을 사용할 수 있는 코드에 대해 알아보도록 하자:)

반응형