디스크의 약 1GB 크기 인 NetworkX 객체를 언 피클 링하고 있습니다. 프로토콜 2를 사용하여 이진 형식으로 저장했지만이 파일을 unpickleing하는 데 아주 오랜 시간이 걸렸습니다. 적어도 30 분이 소요되었습니다. 실행중인 시스템에는 많은 시스템 메모리 (128GB)가있어 병목 현상이 아닙니다.어떻게 먼저 바이너리 피클 데이터를 읽은 다음,이를 언 피클 링합니까?
필자는 메모리에 전체 파일을 먼저 읽음으로써 pickling이 빨라질 수 있다고 읽었습니다. 그리고 그 파일을 unpickle 처리합니다. (특정 스레드는 사용하지 않는 python 3.0을 참조하지만 포인트는 여전히 있어야합니다. 파이썬 2.6에서 사실).
먼저 이진 파일을 읽고 unpickle하려면 어떻게합니까? 나는 시도했다 :
import cPickle as pickle
f = open("big_networkx_graph.pickle","rb")
bin_data = f.read()
graph_data = pickle.load(bin_data)
하지만이 반환
TypeError: argument must have 'read' and 'readline' attributes
어떤 아이디어?
. 나는 "로드"가 "로드 문자열"을 의미하기 때문에이 작업을 생각하지 않았습니다. 반면에로드중인 데이터는 바이너리입니다. 하지만 바이너리로 파일을 읽었 기 때문에 내가 먹는 문자열은 바이너리이기도합니다. 그래서 모두 작동합니다. 감사. – conradlee
@conradlee : 파이썬 문자열은 바이너리 데이터를 지원하므로 그 구별을 할 필요가 없습니다. – unwind