Python性能分析终于不用在"准确"和"快"之间二选一了。3.15版本新增的profiling.sampling模块,代号Tachyon,用统计采样的思路解决了这个老难题。

传统分析器要修改代码、插桩每一个函数调用,生产环境根本不敢开。Tachyon走了一条完全不同的路:它像快照相机一样,每隔几微秒拍一张调用栈的照片,攒够几千张就能拼出程序的时间分布。因为完全不侵入目标进程,开销"几乎为零",开发和线上都能跑。

打开网易新闻 查看精彩图片

它的数学原理很朴素:耗CPU多的函数,被拍到的概率自然高。采样10万次,某函数出现5000次,就估算它占了5%的CPU时间。样本越多,误差越小——10万次采样的误差约±0.5%,1000次则可能漂到±2%。所以Tachyon更适合跑久一点的任务,秒级脚本反而不太合适。

打开网易新闻 查看精彩图片

有个细节值得注意:Tachyon显示的时间都是"估算值",不是精确计时。同一段代码跑两次,12%可能变成11%或13%,这是统计波动的正常现象。看趋势别抠数字,是它官方文档里的建议。

打开网易新闻 查看精彩图片

直接跑脚本、或者attach到正在跑的进程,两种模式都支持。对Python生态来说,这意味着性能优化从"开发阶段的事"变成了"随时可做的事"。