유명 HTTP 라이브러리인 Requests는 사용 가능한 메모리를 초과하는 대용량 파일 다운로드를 처리하는 데 어려움을 겪고 있습니다. 이러한 제한을 극복하려면 파일 청크를 수신하면서 읽고 쓰는 스트리밍 접근 방식을 구현하는 것이 중요합니다.
제공된 코드 조각에서 볼 수 있듯이 기존 접근 방식은 이 점에서 부족합니다. 응답 콘텐츠를 청크로 반복하는 r.iter_content()를 활용함에도 불구하고 응답은 여전히 메모리에 캐시됩니다.
이 문제를 해결하려면 코드에 스트리밍 기능을 도입하는 것이 좋습니다. 주요 수정 사항은 스트림 매개변수가 True로 설정된 request.get()의 구현에 있습니다. 이를 통해 라이브러리는 응답 콘텐츠를 메모리에 저장하지 않고 검색할 수 있습니다.
def download_file(url): local_filename = url.split('/')[-1] with requests.get(url, stream=True) as r: r.raise_for_status() with open(local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) return local_filename
이러한 최적화를 통해 Python의 메모리 소비는 다운로드되는 파일 크기에 관계없이 제한된 상태로 유지됩니다. 지정된 청크 크기와 함께 iter_content를 사용하면 데이터가 관리 가능한 부분으로 파일에 기록되어 메모리 고갈을 방지할 수 있습니다.
각 청크에 반환된 바이트 수가 지정된 청크 크기와 정확하게 일치하지 않을 수 있다는 점에 유의하세요. . 검색된 청크 크기는 다양하고 지정된 크기보다 훨씬 더 큰 것이 일반적입니다. 이 동작에 대한 자세한 내용은 iter_content 및 본문 콘텐츠 워크플로 공식 문서를 참조하세요.
위 내용은 대용량 파일 다운로드 스트리밍을 위해 Python의 요청 라이브러리를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!