다중분류용 학습 데이터를 수집하는 과정 중 수만개의 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 |