用 requests.iter_content() 流式处理大响应体,需设 stream=True、合理 chunk_size,JSON 流需逐段解码,注意服务端分块规范与 Nginx 缓冲配置,高并发推荐 aiohttp 而非多线程 requests。

用 requests.iter_content() 处理大响应体,别用 .text 或 .json()
一旦响应体超过几 MB,用 .text 或 .json() 会把整个响应加载进内存,容易触发 MemoryError,尤其在低配容器或边缘设备上。流式处理的核心是「边收边用」,不攒全量。
实操建议:
立即学习“Python免费学习笔记(深入)”;
-
requests.get(url, stream=True)必须显式传stream=True,否则iter_content()退化为一次性读取 - 用
r.iter_content(chunk_size=8192)按固定块读取,chunk_size设为 4KB–64KB 较稳妥;太小增加系统调用开销,太大削弱流控效果 - 若需解析 JSON 流(如服务端 SSE 或 NDJSON),不能直接
r.json(),得用json.JSONDecoder().raw_decode()逐段解码,或借助ijson库
遇到 ChunkedEncodingError 或连接提前关闭,检查服务端 Transfer-Encoding 和 keep-alive 策略
流式请求失败常不是客户端代码问题,而是服务端返回了不规范的分块编码、中途断连,或反向代理(如 Nginx)默认缓冲整个响应再转发。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 加
timeout=(3.05, 30):短 connect timeout 防卡死,长 read timeout 容忍慢流 - 手动设置
headers={'Connection': 'keep-alive'},避免某些网关误判为短连接 - Nginx 场景下,在
location块中加proxy_buffering off;和proxy_cache off;,否则它会攒满缓冲区才吐给 Python
并发流式请求要用 aiohttp.ClientSession + async for,别套 ThreadPoolExecutor
用多线程跑多个 requests.get(..., stream=True) 看似并行,实则每个线程仍阻塞在 socket read 上,无法真正压满带宽,还易耗尽本地端口和文件描述符。
华友协同办公管理系统(华友OA),基于微软最新的.net 2.0平台和SQL Server数据库,集成强大的Ajax技术,采用多层分布式架构,实现统一办公平台,功能强大、价格便宜,是适用于企事业单位的通用型网络协同办公系统。 系统秉承协同办公的思想,集成即时通讯、日记管理、通知管理、邮件管理、新闻、考勤管理、短信管理、个人文件柜、日程安排、工作计划、工作日清、通讯录、公文流转、论坛、在线调查、
实操建议:
立即学习“Python免费学习笔记(深入)”;
-
aiohttp是更自然的选择:async with session.get(url) as r:后接async for chunk in r.content.iter_chunked(8192) - 注意
aiohttp默认不复用 TCP 连接,需显式创建connector = aiohttp.TCPConnector(limit=100)并传入ClientSession - 若必须用
requests,至少设pool_connections=10和pool_maxsize=10到requests.adapters.HTTPAdapter,但效果仍弱于异步
写入文件或转发到下游时,别用 open(...).write() 直接拼接 chunk
流式数据写磁盘或发给另一个 HTTP 服务时,如果对每个 chunk 都打开/关闭文件、或构造新 requests.post(),I/O 开销和连接数会爆炸式增长。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 写文件:用
open(..., 'wb')一次打开,循环中只调f.write(chunk),避免 flush 频繁可加buffering=8192 - 转发 HTTP:用
requests.post(url, data=r.iter_content()),让底层自动流式转发,不要自己读完再 post - 若需中间处理(如日志、过滤),用生成器函数包装:
def process_stream(r): yield from (transform(c) for c in r.iter_content()),保持惰性
iter_content() 就高枕无忧。









