首頁 > 後端開發 > Python教學 > 如何針對串流大檔案下載優化 Python 的 Requests 函式庫?

如何針對串流大檔案下載優化 Python 的 Requests 函式庫?

Barbara Streisand
發布: 2024-12-17 19:31:10
原創
846 人瀏覽過

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

使用Requests 在Python 中進行串流優化的檔案下載

Requests 是一個著名的HTTP 庫,在處理超出可用記憶體的大檔案下載時面臨著挑戰。為了克服這一限制,實現一種串流方法至關重要,該方法可以在收到檔案區塊時讀取和寫入檔案區塊。

傳統方法(如提供的程式碼片段所示)在這方面存在不足。儘管使用了 r.iter_content()(它以區塊的形式迭代回應內容),但回應仍然緩存在記憶體中。

要解決此問題,請考慮在程式碼中引入流功能。關鍵的修改在於requests.get()的實現,並將stream參數設為True。這允許庫檢索響應內容而不將其存儲在內存中:

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 的 Requests 函式庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板