현재 줄에서 한 줄씩 사전에서 csv 파일에 쓰고 있습니다. 이처럼 : 내 사전에 큰 얻는다 (예를 들어 20 ~ MB) 그리고 나는 내 리눅스 머신에 힙 공간의 제약을 오전 :python 사전에서 파일로 쓰기
writer = csv.writer(open(filename, 'a'))
for key, value in mydict.items():
writer.writerow([key, value])
내 문제는 이것이다. 따라서 필자는 쓰기 전에 사전에 모든 데이터를 누적하는 대신 사전에 데이터를 사용할 수있게되면 즉각 csv 파일에 데이터를 쓰는 방법을 사용했습니다.
지금, 또 다른 문제가 있습니다. 많은 수의 IO 작업 (수천 줄의 디스크에 기록됨)으로 인해 프로그램이 매우 느리게 실행됩니다.
나는 중견을 찾아야합니다. 아마도, 5000 (k, v) 데이터를 사전에 쌓아서 디스크에 쓰고 내 사전을 비우고 다음 5000 (k, v) 쌍을 기다리십시오 ...이 과정을 계속하십시오. 다른 아이디어가 있습니까?
간단히 말해 파일에 일괄 적으로 쓰는 것이 좋습니까?
감사합니다,
20 MB에서 메모리 문제가 발생합니까? 임베디드 시스템에서 실행하고 있습니까? – Hyperboreus
매우 힘든 시스템에 있지 않는 한 5000 개의 쓰기 및 20MB의 데이터가 빠르다. 프로그램에서 느린 다른 것이 있습니까?/dev/null에 쓰기를 시도하십시오. 속도가 느리다면 문제가되는 파일을 쓰지 않습니다. – tdelaney
당신의 아이디어는 매우 간단하게 들립니다. 실제로 사전을 쓰고 지우는 코드 앞에'if len (mydict)> = BATCH_SIZE :'를 추가하는 것입니다. 끝 부분에 마지막 부분 배치를 작성하는 것을 잊지 마십시오. 버퍼링 된 CSV 래퍼를 사용하여 더욱 쉽게 만들 수 있습니까? – abarnert