复用 requests.Session() 能显著提升高频 HTTP 请求性能,主要体现在同一域名的连续请求中,通过复用 TCP/TLS 连接减少握手开销,实测耗时可降30%–70%;但跨域名、服务端关闭连接或未关闭 Session 时可能无效甚至更慢。
复用 requests.Session() 确实能显著提升高频 HTTP 请求的性能,但效果高度依赖使用场景——不是所有情况都有效,也并非“用了就快”。核心收益来自连接复用(HTTP/1.1 Keep-Alive)和请求预配置,而非 Session 本身有魔法。
当连续发起多个请求到同一域名(含端口、协议)时,Session 复用底层 urllib3 连接池,避免重复 TCP 握手、TLS 协商和连接建立开销。实测中,对同一 host 的 100 次请求,相比每次新建 Session,总耗时可减少 30%–70%,尤其在网络延迟高或 TLS 开销大(如 HTTPS)时更明显。
Session 的连接池不会自动优化跨域名请求,也不保证连接永远复用。以下情况会失效或引入额外负担:

session.close(),空闲连接可能堆积,占用文件描述符(尤其在高并发、短生命周期脚本中)可通过日志或底层机制验证实际行为:
import logging; logging.basicConfig(level=logging.DEBUG),观察是否有 Starting new HTTPS connection 或 Resetting dropped connection 日志session.adapters['https://'].poolmanager.connection_pool_kw 查看池大小与当前空闲连接数tcpdump 抓包,确认 TCP 连接是否复用(相同源/目的 IP+端口上承载多个 HTTP 请求)不是“所有请求都该套个 Session”,而是按粒度合理复用:
close()
requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=20),避免默认值(10/10)在高并发下成为瓶颈