2012-02-25 4 views
1

파일을 복사하고 간단한 처리를해야합니다. 큰 파일이기 때문에 전체 파일을 메모리로 읽을 수 없습니다.파이썬에서 버퍼를 복사하는 동안 메모리 사용 최적화

buffer = inFile.read(buffer_size) 
while len(buffer) > 0: 
    outFile.write(buffer) 
    simpleCalculations(buffer) 
    buffer = inFile.read(buffer_size) 

simpleCalculations 절차는 이러한 맥락에서 관련이 있지만 버퍼 목록의 후속 메모리 할당에 대한 걱정 : I는 다음과 같습니다 코드의 조각을 마련. 일부 하드웨어 구성에서는 메모리 사용량이 매우 높아져서 시스템이 사망합니다. 나는 버퍼를 재사용하고 싶다. Python 2.6에서 이것이 가능한가?

+0

"일부 하드웨어 구성에서 메모리 사용량이 매우 높습니다"? 이게 문제가 되나요? 많은 메모리를 사용하는 것이 정상입니다. 무언가가 깨졌습니까? 너무 느린가요? 모든 것이 제대로 작동한다면 걱정할 필요가 없습니다. –

+0

@ S.Lott 그것은 기계를 죽인다. 우리는 운전자 문제를 의심하지만이 신청서가 비난받을 것이라고 증명할 때까지 – Trismegistos

+0

그런 다음 ** 업데이트 **는 ** 실제 ** 상황에서 "매우 높음"으로 바뀝니다. 컴퓨터를 죽이는 것처럼 보입니다. 중요합니다. –

답변

2

나는 이것에 대해 쉬운 방법이 없다고 생각합니다. file.read() 메서드는 호출 할 때마다 새로운 문자열을 반환합니다. 반면에 메모리가 부족하다는 걱정은하지 않아도됩니다. 새로 읽은 문자열에 buffer을 할당하면 이전에 읽은 문자열에 더 이상 참조가 없으므로 메모리가 자동으로 해제됩니다 (자세한 내용은 here 참조).

2

파이썬은 엄격하게 참조 횟수가 계산되는 환경이므로 더 이상 참조가 없으면 버퍼가 할당 취소됩니다.

실제 RAM은 있지만 여분의 주소 공간이 걱정된다면 한 번에 조금씩 읽지 않고 파일을 mmap 수 있습니다.

관련 문제