Skip to content

第 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 请求延迟?

🛠️ 动手实践

  1. 配置连接池大小,对比不同 pool_maxsize 对并发性能的影响。
  2. 使用 requests-cache 缓存 API 响应,验证相同请求的第二次调用速度。
  3. 开启 gzip 压缩,测量响应体大小变化。

完成练习后,进入下一章:API 客户端封装模式