Python

csv 저장 속도가 느릴 경우에 multiprocessing csv save 방법

흰곰곰 2019. 10. 9. 21:19

주로 pandas의 대용량의 데이터를 저장하려고 한적이 있으시죠?

하지만 데이터가 클수록 메모리도 많이 차지하고, 속도도 엄청느리다는 것을 느끼셨겠죠

아래의 코드는 메모리는 일단 고려하지 않았고, 대용량의 데이터를 쓰레드를 이용하여, 파일을 나누어 빠르게 저장하는 코드입니다.

( 메모리 사양에 따라서 process 부분을 조정하시면 됩니다. )

1. Python example

===> 테이블을 10만건씩 나누어서 파일로 저장

from multiprocessing import Process,Queue
import os

def big_table_save(num, table):
    table.to_csv(os.path.join('./test2','_'+str(num)+'.csv'),index=False,header=None)
    print("success")

def total_table_save(table):
    counting = len(table)
    if counting <= 100000:
        small_table_save(table)
    else:
        procs = []
        numbers=list(range(0,10))
        quotient, remainder = (counting//10, counting%10)
        for index, number in enumerate(numbers):
            if number!=9:
                part_table=table[quotient*number:quotient*(number+1)]
            else:
                part_table=table[quotient*number:]
            proc = Process(target=big_table_save, args=( number, part_table  )) 
            procs.append(proc) 
            proc.start()   
        for proc in procs: 
            proc.join()