用Python 3.15采样分析器剖析web-edit:换行符保留占 64.8% CPU栈
Simon Willison用Python 3.15内置profiling.sampling对未修改的web-edit应用做采样分析,发现preserve_endings出现在 64.8% 的CPU栈中;他提到 95.1% 的栈来自AnyIO工作线程。
AI解读:Simon Willison用Python 3.15内置的profiling.sampling对未修改的web-edit应用做采样分析,并让Codex中的GPT-6 Astra Extra High先生成研究、再产出火焰图与源码热力图示例。
结果显示,在编辑负载下,换行符保留处理占据主导:preserve_endings出现在 15,296 个已记录CPU栈中的 64.8%,SequenceMatcher.find_longest_match贡献了 38.3% 的叶子样本。
他指出采样全部线程是必要的,因为 95.1% 的栈来自AnyIO的工作线程;只分析主线程会漏掉这些样本。
以上数字来自他对web-edit应用的一次采样运行,来源未提供优化前后对比、节省比例或其他应用的通用结论。
Simon Willison用Python 3.15内置的profiling.sampling采样分析器,对未修改的web-edit应用做了一次性能剖析,并据此生成火焰图和源码热力图示例。
他说这次分析由Codex中的GPT-6 Astra Extra High按“先研究、再产出演示”的要求执行,目标是给出PyPI上web-edit应用的Python 3.15火焰图与热力图演示。
一次采样运行发现的问题热点
在他描述的忙碌编辑负载下,混合换行符保留处理占用了大量CPU时间:preserve_endings出现在 15,296 个已记录CPU栈中的 64.8%。
叶子样本层面,SequenceMatcher.find_longest_match贡献了 38.3%,这是采样中直接落在该函数上的样本比例。
- preserve_endings:64.8% 的CPU栈中出现
- SequenceMatcher.find_longest_match:38.3% 的叶子样本
- 记录样本总数:15,296
必须采样全部线程
Willison说,95.1% 的栈来自AnyIO的工作线程,只对主线程做性能分析会完全错过这部分样本,因此采样全部线程是这次分析的必要条件。
- 来自AnyIO工作线程的栈占比:95.1%
- 仅主线程分析会漏掉绝大多数样本