with session.get(url, stream=True, proxies=routes,
                 timeout=(5, 30)) as response:
    response.raise_for_status()
    with open(part_path, 'wb') as output:
        for chunk in response.iter_content(chunk_size=64 * 1024):
            if chunk:
                output.write(chunk)

이 패턴은 애플리케이션의 기존 Requests 세션, 프록시 경로, URL, 임시 출력 경로와 함께 사용하세요. 공개 HTTP 경로의 경우 HTTP 프록시 목록이 프록시 매핑을 위한 후보 주소를 제공합니다. 스트리밍 패턴은 response.content을 얻은 뒤 두 번째 전체 크기 객체를 쓰는 대신 본문을 점진적으로 소비합니다.

다운로드 전반에서 그 성질을 유지하세요. stream=True는 본문을 미루지만, 이후 response.content에 접근하면 여전히 전체를 메모리에 모을 수 있습니다. iter_content의 청크 크기는 읽기 기본 설정이며, 웹사이트나 프록시에 대한 HTTP 청크 전송 인코딩 요청이 아닙니다.

응답 컨텍스트 관리자는 쓰기가 실패하거나 애플리케이션이 일찍 중단되어도 응답을 닫습니다. 예시의 타임아웃 쌍은 전체 전송에 대한 실제 시간 마감이 아닙니다. 필요에 따라 다운로드의 수명 정책을 별도로 설정하세요.

성공적으로 소비한 뒤 최종 이름을 게시하기 전에 애플리케이션이 기대하는 산출물을 확인하세요. 중단되면 부분 파일은 의도적인 재개 정책 아래에서만 보관하고, 원격 표현을 식별하는 메타데이터를 함께 두세요. 비어 있지 않은 임시 파일은 성공한 다운로드가 아닙니다.

관련 글