>백엔드 개발 >파이썬 튜토리얼 >대용량 파일 다운로드 스트리밍을 위해 Python의 요청 라이브러리를 어떻게 최적화할 수 있습니까?

대용량 파일 다운로드 스트리밍을 위해 Python의 요청 라이브러리를 어떻게 최적화할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-17 19:31:10835검색

How Can Python's Requests Library Be Optimized for Streaming Large File Downloads?

요청을 사용하여 Python에서 스트림 최적화 파일 다운로드

유명 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.