본문 바로가기

AI/Python

주피터 노트북에서 멀티프로세싱 사용

다중분류용 학습 데이터를 수집하는 과정 중 수만개의 json 파일에서 텍스트를 추출하던 중

병렬처리의 필요성을 느껴 검색을 해봄.

 

json 의 구조나, EDA 수행에는 터미널보다 주피터 노트북이 유용함.

기존에 말뭉치 전처리를 위해 터미널에서 병렬처리 라이브러리인 ray 를 활용한 적이 있었으나,

주피터 노트북에서 병렬처리를 해본 적은 없었음.

 

결론. 주피터 노트북에서 병렬처리을 사용하려면, 메인 함수를 외부파일로 빼고, 해당 함수를

불러와서 수행해야 함.

 

병렬 처리 전 json 파싱 시간 (json 파일 총 66097개) : 237.5초

병렬 처리 후 json 파싱 시간 (json 파일 총 66097개) : 6.9초

 

from multiprocessing import Pool
from tqdm import tqdm
import os
from parsing import pars # 외부로 뺀 함수
import math
import time


# 외부로 뺀 함수, parsing.py
# import json

# def pars(path_files):
#     with open(path_files, "r", encoding="utf-8") as f:
#         text = json.load(f)['전사정보']['OrgLabelText']

#     return text


# 파일 경로 추출
path = "./data/1.기쁨/"
folder_list = os.listdir(path)

path_list = []
for folder in folder_list:
    path_list.append(path+folder)
    
path_files = []
for i in path_list:
    file_list = os.listdir(i)
    for a in file_list:
        path_files.append(i+"/"+a)
        
start = time.time()
math.factorial(100000)

# 병렬처리 수행
with Pool(10) as pool:
    imap = pool.imap(pars, path_files)
    results = list(tqdm(imap, total=len(path_files), desc="processing"))
'''
Pool(10): 10개의 프로세서를 사용하겠다는 의미
pool.imap(pars, path_files): pars는 path_files를 인자로 받는 미리 정의한 외부 함수, path_files는 리스트 형이여야 함
'''
end = time.time()
print(f"{end - start:.5f} sec")

 

 

 

 

 

 

 

반응형

'AI > Python' 카테고리의 다른 글

파이참에서 터미널을 아나콘다 가상환경으로 설정  (0) 2022.10.25
NoneType check  (0) 2022.08.10
Anaconda 가상환경  (0) 2022.01.25
NLP 학습을 위한 기본 지식 #한국어의 단위  (0) 2021.10.12
Python #데이터 전처리  (0) 2021.09.29