第 16 章 · 性能优化与资源管理
本章目标:掌握连接池、缓存、压缩等优化技术,提升 HTTP 客户端性能。
16.1 连接池配置
python
import requests
from requests.adapters import HTTPAdapter
session = requests.Session()
# 精细控制连接池
adapter = HTTPAdapter(
pool_connections=20, # 连接池数量
pool_maxsize=100, # 最大连接数
max_retries=3 # 失败重试
)
session.mount('https://', adapter)
session.mount('http://', adapter)16.2 响应缓存
python
import requests
from requests_cache import CachedSession
# 启用磁盘缓存
session = CachedSession('cache.sqlite', expire_after=3600)
# 相同请求自动返回缓存
resp1 = session.get('https://api.example.com/data') # 真实请求
resp2 = session.get('https://api.example.com/data') # 缓存命中16.3 压缩传输
python
import requests
# 自动处理 gzip/deflate 压缩
resp = requests.get('https://api.example.com/large-data')
print(resp.headers['content-encoding']) # gzip
# 请求时指定接受编码
resp = requests.get(
'https://api.example.com/data',
headers={'Accept-Encoding': 'gzip, deflate'}
)16.4 httpx 性能配置
python
import httpx
# 精细配置 Limits
limits = httpx.Limits(
max_connections=100, # 最大连接数
max_keepalive_connections=20, # 保持活跃连接数
keepalive_expiry=30.0 # 保持活跃超时(秒)
)
with httpx.Client(limits=limits, timeout=10.0) as client:
resp = client.get('https://httpbin.org/get')16.5 本章小结
- 连接池复用显著提升多次请求性能;
- 响应缓存避免重复网络请求;
- 压缩传输减少带宽消耗;
- httpx.Limits 精细控制连接资源。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. requests 连接池的核心配置参数是?
2. requests-cache 的主要用途是?
3. httpx.Limits 中 keepalive_expiry 的作用是?
4. 以下哪种方式不能减少 HTTP 请求延迟?
🛠️ 动手实践
- 配置连接池大小,对比不同 pool_maxsize 对并发性能的影响。
- 使用 requests-cache 缓存 API 响应,验证相同请求的第二次调用速度。
- 开启 gzip 压缩,测量响应体大小变化。
完成练习后,进入下一章:API 客户端封装模式。