为什么我应该使用iter_content
,特别是我对使用chunk_size的目的感到困惑,因为我已经尝试过使用它,并且在下载成功之后,文件似乎都保存了。
g = requests.get(url, stream=True)
with open('c:/users/andriken/desktop/tiger.jpg', 'wb') as sav:
for chunk in g.iter_content(chunk_size=1000000):
print (chunk)
sav.write(chunk)
帮助我了解iter_content
的使用情况以及当我看到我使用1000000字节作为chunk_size
时会发生什么,目的究竟是什么和结果?
答案 0 :(得分:4)
这是为了防止一次将整个响应加载到内存中(它还允许您在流式响应时实现一些并发性,以便在等待请求完成时可以正常工作)。
设置流媒体请求的目的通常是媒体。就像尝试使用请求下载500 MB .mp4文件一样,您希望流式传输响应(并以chunk_size
的块的形式写入流),而不是等待所有500mb立即加载到python中。
如果要实现任何UI反馈(例如“已下载<chunk_size>
字节...”等下载进度),则需要进行流式处理和分块。如果您的回复包含Content-Size标头,您也可以计算保存的每个块的完成百分比。
答案 1 :(得分:2)
从documentations chunk_size
数据大小开始,该应用将在stream=True
时在内存中读取。
例如,如果响应的大小为1000且chunk_size
设置为100,我们会将响应拆分为十个块。