ホームページ > バックエンド開発 > Python チュートリアル > Python のリクエスト ライブラリを大規模ファイルのストリーミング ダウンロードに最適化するにはどうすればよいでしょうか?

Python のリクエスト ライブラリを大規模ファイルのストリーミング ダウンロードに最適化するにはどうすればよいでしょうか?

Barbara Streisand
リリース: 2024-12-17 19:31:10
オリジナル
847 人が閲覧しました

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

リクエストを使用した Python でのストリーム最適化ファイルのダウンロード

有名な HTTP ライブラリである Requests は、使用可能なメモリを超える大きなファイルのダウンロードを処理するという課題に直面しています。この制限を克服するには、ファイル チャンクを受信したときに読み書きするストリーミング アプローチを実装することが重要です。

提供されたコード スニペットに見られるように、従来のアプローチはこの点で不十分です。応答コンテンツをチャンク単位で反復処理する r.iter_content() を利用しているにもかかわらず、応答は依然としてメモリにキャッシュされています。

この問題に対処するには、コードにストリーミング機能を導入することを検討してください。重要な変更は、stream パラメータを 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 および body コンテンツのワークフローに関する公式ドキュメントを参照してください。

以上がPython のリクエスト ライブラリを大規模ファイルのストリーミング ダウンロードに最適化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート