跳转至

Multipart 性能测试

zerodep multipart(纯 Python)与 python-multipart(基于回调的解析器)的同类对比性能测试。

测试环境

  • CPU: x86_64 Linux
  • Python: 3.12
  • 工具: pytest-benchmark 5.2.3(报告均值)
  • 对标库: python-multipart 0.0.20
  • 最后更新: 2026-05-16

实现对比

实现 文件/包 说明
zerodep multipart.py 仅标准库的边界分割解析器和编码器
python-multipart (参考库) 基于回调的流式 multipart 解析器

载荷规模

标签 说明 大约大小
小型 3 个文本字段 ~200 B
中型 5 个文本字段 + 2 个小文件(各 2 KB) ~10 KB
大型 10 个文本字段 + 5 个文件(各 80 KB) ~500 KB

解析性能(均值)

载荷 zerodep python-multipart 加速比
小型 21.7 μs 87.6 μs 快 4.0x
中型 63.0 μs 239.9 μs 快 3.8x
大型 463.4 μs 645.0 μs 快 1.4x

编码性能(均值,仅 zerodep)

python-multipart 不提供编码器,因此仅测量 zerodep。

载荷 zerodep
小型 4.0 μs
中型 7.8 μs
大型 38.8 μs

往返性能(均值,仅 zerodep)

编码 → 解析循环。

载荷 zerodep
小型 24.2 μs
中型 73.2 μs

要点总结

  • 解析快 1.4–4.0 倍 — zerodep 的边界分割算法在所有载荷规模上均优于 python-multipart 的基于回调的流式解析器。
  • 小载荷加速比最高 — 小消息体中每次调用的开销占主导地位;zerodep 完全避免了回调建立的成本。
  • 编码速度快 — 构建 500 KB 的 multipart 消息体仅需约 39 μs,相比网络 I/O 可以忽略不计。
  • 往返不到 75 μs — 中型载荷(10 KB)的编码 + 解析在约 73 μs 内完成。
  • python-multipart 没有编码器 — zerodep 在一个文件中同时提供解析和编码;python-multipart 仅支持解析。
  • 基准测试使用预构建载荷 — 载荷生成成本不计入计时。
  • zerodep 零 pip 依赖 — 仅使用标准库(rebase64quopridataclasses)。

自行运行

pip install pytest pytest-benchmark python-multipart
pytest multipart/test_multipart_benchmark.py --benchmark-only -v

最新 CI 结果

每次发版时通过 Benchmark CI 自动更新。