Python requests库中stream=True参数的作用是什么?
stream=True在requests库中的作用 你的推测是准确的,该参数确实和内存占用高度相关,核心作用是控制响应体的下载时机:
- 默认
stream=False时,requests执行请求后会立即将完整响应体全部加载到内存中再返回响应对象,适合接口响应、小文件等体积较小的内容场景,处理大文件时会导致内存占用过高甚至程序OOM崩溃。 - 开启
stream=True后,requests只会先请求并下载响应头,返回响应对象时不会预加载响应体内容,响应体的下载会延迟到你主动调用iter_content()、iter_lines()等方法时才会逐块执行,适合大文件下载、流式内容(比如实时日志流、视频流)处理的场景。
常见用法示例
以下是大文件下载的标准写法,逐块写入本地,全程内存占用只会等于你设置的单次块大小:
import requests # 开启流式下载 with requests.get('https://example.com/10GB_installer.iso', stream=True) as resp: resp.raise_for_status() # 每次处理1MB大小的内容块 with open('local_installer.iso', 'wb') as f: for chunk in resp.iter_content(chunk_size=1024 * 1024): # 过滤掉保活空块 if chunk: f.write(chunk)
注意事项
- 开启
stream=True后建议始终用with上下文管理器包裹请求,会自动处理响应关闭,避免HTTP连接泄漏。如果没有用上下文管理器,处理完内容后需要主动调用resp.close()释放连接。 - 如果不需要处理响应体的部分内容,只是要完整下载,
stream=False的下载效率会更高,不需要手动迭代处理块。
内容的提问来源于stack exchange,提问作者Nikolass
相关产品推荐
相关产品推荐

