在 Python 的 requests
库中,流(Stream)是一种特殊的工作模式,它允许您逐步接收 HTTP 响应的数据,而不是一次性加载整个响应体到内存中。这对于处理大型文件或实时数据流非常有用,因为它可以减少内存使用并允许即时处理数据。
架构
requests
的流(Stream)架构基于几个关键概念:
- 流式响应:当您启用流式响应时,
requests
不会立即下载数据的完整内容,而是逐块接收数据。 - 块读取:您可以使用
iter_content()
方法以块的形式读取响应体,或者使用raw
属性直接访问底层的 I/O 流。 - 流式上传:
requests
也支持流式上传,允许您逐块发送数据,而不是一次性发送整个数据。
组件内容
- 流式响应参数:通过将
stream
参数设置为True
来启用流式响应。 - 块读取方法:
iter_content()
方法允许您指定块的大小,并以字节为单位逐块读取响应体。 - 直接访问底层流:
raw
属性提供了一个类似文件的对象,可以直接读取响应体。 - 流式上传:可以通过读取文件对象并将其传递给
data
参数来实现流式上传。
代码案例
下面是一个使用 requests
库进行流式下载的示例代码:
import requests
# 发送一个 GET 请求,并启用流式响应
response = requests.get('https://httpbin.org/stream/100', stream=True)
# 逐块读取响应体
for chunk in response.iter_content(chunk_size=8):
print(chunk)
# 关闭响应流
response.close()
在这个示例中,我们发送了一个 GET 请求到 httpbin.org
的流式端点,并启用了流式响应。然后,我们使用 iter_content()
方法逐块读取响应体,每块大小为 8 字节。最后,我们关闭了响应流以释放资源。
这个示例展示了如何使用 requests
库的流式响应功能来逐步下载和处理数据。通过启用流式响应,您可以有效地处理大型文件或实时数据流,而不会占用大量内存。