跳转至

性能基准

pylopdf会同时公开优势与劣势。以下数据只是一个环境和语料库的快照,并非普遍排名。 请用它判断自己的工作负载应该测量什么。

最近一次运行

2026-07-26 08:18 UTC · Windows 11 · Python 3.14.6 · AMD64
pylopdf 0.11.0 · pymupdf 1.28.0 · pypdf 6.14.2 · pdfplumber 0.11.10
预热1次,测量5次;表中为中位数,单位毫秒。

概览

工作负载 最新语料库的结果
合并10个真实PDF pylopdf 36.6 ms,pymupdf 131.8 ms,pypdf 426.3 ms
以2×渲染第一页 10个文件均由pylopdf领先
以2×渲染12页 render_pages()从317.4 ms(1 worker)降至81.5 ms(8 workers),加速3.89倍
提取全部文本 4个文件由pylopdf领先,6个由pymupdf领先
提取一致性代理指标 因阅读顺序策略不同,相似度从0.121到1.000

文本提取

提取所有页面,单位毫秒,越小越快。

文件 pylopdf pymupdf pypdf pdfplumber
bill-hr815.pdf 191.6 183.2 689.7 9997.1
bunka-kokugo-series-019-p4.pdf 1.9 0.5 1.0 1.8
f1040.pdf 26.7 66.9 230.3 704.7
mhlw-doc.pdf 18.4 11.5 114.3 263.3
nics-background-checks-2015-11.pdf 16.1 10.8 177.5 524.7
patent-us223898.pdf 33.3 6.3 79.2 493.7
pdf20-simple.pdf 0.3 1.2 1.7 2.4
senate-expenditures.pdf 6.6 7.2 132.2 374.1
usrguide.pdf 163.0 54.5 673.6 2050.7
wdl6812-manuscript.pdf 0.3 0.8 1.3 2.3

提取内容

这只是代理指标,不是正确率。文本经空白归一化后与pymupdf比较。表单和OCR层的相似度 较低,可能只是阅读顺序或空白策略不同;即使字符数相同也会发生这种情况。

文件 pylopdf字符数 pymupdf字符数 相似度
bill-hr815.pdf 300559 300559 1.000
bunka-kokugo-series-019-p4.pdf 0 0 1.000
f1040.pdf 10156 10156 0.683
mhlw-doc.pdf 1264 1251 0.961
nics-background-checks-2015-11.pdf 5650 5650 0.121
patent-us223898.pdf 11218 11218 0.320
pdf20-simple.pdf 11 11 1.000
senate-expenditures.pdf 4516 4516 0.443
usrguide.pdf 55624 55560 0.996
wdl6812-manuscript.pdf 0 0 1.000

合并

任务 pylopdf pymupdf pypdf
合并语料库全部10个文件 36.6 131.8 426.3

渲染

第一页输出为2× PNG,单位毫秒,越小越快。

文件 pylopdf pymupdf
bill-hr815.pdf 41.1 88.9
bunka-kokugo-series-019-p4.pdf 48.2 110.5
f1040.pdf 49.5 97.1
mhlw-doc.pdf 35.5 71.2
nics-background-checks-2015-11.pdf 54.2 72.6
patent-us223898.pdf 32.3 68.8
pdf20-simple.pdf 8.0 19.9
senate-expenditures.pdf 55.2 56.8
usrguide.pdf 28.3 54.9
wdl6812-manuscript.pdf 42.9 83.3

并行渲染

usrguide.pdf前12页输出为2× PNG,单位毫秒,越小越快。 批处理保持输入顺序,并使用同一个不可变文档快照。

Workers 时间 相对1 worker加速
1 317.4 1.00倍
2 179.6 1.77倍
4 99.1 3.20倍
8 81.5 3.89倍

实际并发度同时受指定worker数和约512 MB的估算实时渲染内存限制。

free-threaded提取

在Windows 11的free-threaded CPython 3.14.6上,对两个互相独立的 bill-hr815.pdf执行全页文本提取。预热一次后,交替先运行的模式,取七组配对运行的 中位数:

模式 Workers 时间 加速比
串行 1 400.8 ms 1.00倍
并行 2 235.5 ms 1.70倍

每次运行中两个副本的输出都完全一致,并且解释器确认导入后GIL仍保持禁用。

复现

语料库位于tests/assets/real_world,文件来源与许可证记录在同一目录。

uv sync --all-extras --group bench
uv run python bench/run.py
uv run python tools/pyodide_compat.py --root . --benchmark-only \
  --benchmark-output .tmp/limits-benchmark.json
# 在Windows上使用free-threaded CPython 3.14解释器:
py -3.14t bench/free_threaded.py
# 在POSIX上:
python3.14t bench/free_threaded.py

生成的原始报告提交在 bench/results/latest.md。 单独生成的free-threaded报告提交在 bench/results/free-threaded-latest.md; 重新运行bench/run.py不会覆盖CPython 3.14t证据。 native/Pyodide资源策略基准另行提交在 bench/results/limits-latest.md。 第二条command测量有界open/extract和受控拒绝。CI还会在Pyodide中运行相同case并 记录Wasm linear memory增长;这些时间和memory值只表示趋势,不是native/Wasm 性能结论。 引用数据时,请同时提供运行环境与语料库。