Requests 是一个非常好的库。我想用它来下载大文件(> 1GB)。问题是不可能将整个文件保存在内存中。我需要分块阅读。这是以下代码的问题:
import requests
def DownloadFile(url)
local_filename = url.split('/')[-1]
r = requests.get(url)
f = open(local_filename, 'wb')
for chunk in r.iter_content(chunk_size=512 * 1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.close()
return
由于某种原因,它不能以这种方式工作;在将响应保存到文件之前,它仍会将响应加载到内存中。
原文由 Roman Podlinov 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用以下流式代码,无论下载文件的大小如何,Python 内存使用都会受到限制:
请注意,使用
iter_content
返回的字节数不完全是chunk_size
;预计它是一个通常更大的随机数,并且预计在每次迭代中都会有所不同。请参阅 body-content-workflow 和 Response.iter_content 以获取更多参考。