Ramanu

Python Multiprocessing 본문

데이터

Python Multiprocessing

Ramanu 2020. 11. 30. 13:10

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