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中文網其他相關文章!