为什么在 python 请求中使用 iter_content 和 chunk_size
Why to use iter_content and chunk_size in python requests
为什么我应该使用 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
时会发生什么,确切的目的和结果是什么?
从 documentations chunk_size
是数据大小,该应用程序将在 stream=True
时读取内存。
例如,如果响应的大小是 1000 并且 chunk_size
设置为 100,我们将响应分成十个块。
这是为了防止将整个响应立即加载到内存中(它还允许您在流式传输响应时实现一些并发性,以便您可以在等待请求完成时完成工作)。
设置流媒体请求的目的通常是为了媒体。就像尝试使用请求下载一个 500 MB 的 .mp4 文件一样,您想流式传输响应(并以 chunk_size
的块写入流)而不是等待所有 500mb 立即加载到 python .
如果您想实现任何 UI 反馈(例如 "downloaded <chunk_size>
bytes..." 之类的下载进度),您将需要流式传输和分块。如果您的回复包含 Content-Size header,您也可以计算保存的每个块的完成百分比。
为什么我应该使用 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
时会发生什么,确切的目的和结果是什么?
从 documentations chunk_size
是数据大小,该应用程序将在 stream=True
时读取内存。
例如,如果响应的大小是 1000 并且 chunk_size
设置为 100,我们将响应分成十个块。
这是为了防止将整个响应立即加载到内存中(它还允许您在流式传输响应时实现一些并发性,以便您可以在等待请求完成时完成工作)。
设置流媒体请求的目的通常是为了媒体。就像尝试使用请求下载一个 500 MB 的 .mp4 文件一样,您想流式传输响应(并以 chunk_size
的块写入流)而不是等待所有 500mb 立即加载到 python .
如果您想实现任何 UI 反馈(例如 "downloaded <chunk_size>
bytes..." 之类的下载进度),您将需要流式传输和分块。如果您的回复包含 Content-Size header,您也可以计算保存的每个块的完成百分比。