为什么在python请求中使用iter_content和chunk_size

时间:2017-09-13 19:38:10

标签: python python-requests chunks

为什么我应该使用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时会发生什么,目的究竟是什么和结果?

2 个答案:

答案 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,我们会将响应拆分为十个块。