오늘은 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)
필자가 작성한 코드 중 멀티프로세싱과 관련된 부분만 가지고 왔는데 예시 부분과 변수명을 적절히 수정하면 오류 없이 멀티프로세싱의 신세계를 맛 볼 수 있을 것이다. (엄청난 시간단축ㅇㅇ..)
그러나 병렬 프로그래밍의 이해 없이 코드를 작성할 경우, 싱글 프로스세보다 더 느리거나 예상하지 못한 결과가 나올 수 있으니 디버깅을 꼭꼭 하면서 작성하기 약또옥!!
다음에는 각 프로세스의 결과값을 저장하여 멀티프로세싱 이후 그 결과값을 사용할 수 있는 코드에 대해 알아보도록 하자:)
반응형