Ramanu
Python Multiprocessing 본문
Python에서 multiprocessing을 이용해 전처리 할 때 함수를 거쳐 생성된 데이터를 dictionary로 저장하는 방법
import pandas as pd
import time
import multiprocessing
from itertools import repeat
import pickle
import os
def test(file_list, dic_add):
f = open(file_name, 'r', encoding="utf-8")
data = pd.read_csv(f)
'''
data preprocessing doing!!
'''
dic_add[file_name] = data_preprocessing # file_name = key, data_preprocessing = value
if __name__ == '__main__':
start_time = time.time()
n_process = multiprocessing.cpu_count() # how many use cpu
file_list = os.listdir("./")
manager = multiprocessing.Manager() # point skill!!
d = manager.dict() # shared dictionary
pool = multiprocessing.Pool(processes=n_process)
pool.starmap(test, zip(file_list, repeat(d)))
pool.close()
pool.join()
data = dict(collections.OrderedDict(sorted(d.items()))) # sort from key
with open("./data.pkl", "wb") as f:
pickle.dump(data, f)
print("=== %s seconds ===" % (time.time() - start_time))
Manager를 사용해서 공유 dictionary를 만든다.
repeat를 사용하여 dictionary가 pool이 끝날때까지 인자로 사용되도록 한다.
zip의 경우 pool을 사용할 때, 1개가 아닌 다수의 인자를 넣고 싶을 때 사용한다.
'데이터' 카테고리의 다른 글
Pandas 주요 기능 (0) | 2020.11.30 |
---|---|
python dictionary key값 중심으로 정렬 후 dictionary로 반환 (0) | 2020.11.10 |
python multiprocessing Manager pickle dump, load error (0) | 2020.11.10 |
Pandas isin (0) | 2020.11.02 |
Pandas read_csv, to_csv (0) | 2020.10.30 |
Comments