当前位置:首页 > 文章列表 > 文章 > python教程 > Python 3.15 profiling.sampling 怎样选择 wall 和 cpu 模式

Python 3.15 profiling.sampling 怎样选择 wall 和 cpu 模式

来源:17golang原创 2026-10-14 13:29:51 0浏览 收藏

Python 3.15 的 profiling.sampling(Tachyon)同时提供 wall-clock 和 CPU 两种采样模式。遇到“接口变慢”或“计算变重”时,先按问题边界选模式:包含网络、磁盘等待和阻塞时间,用 wall;只想看主动消耗 CPU 的部分,用 cpu。两者都是统计采样,不是精确的函数计时器。

官方地址:https://docs.python.org/3.15/library/profiling.sampling.html

一句话判断:业务总耗时异常先看 wall,确认计算热点再看 cpu;如果问题是精确调用次数或微小差异,改用 tracing 或 timeit。

先看懂 wall 和 cpu 记录的时间边界

wall-clock 记录的是经过了多少现实时间,所以等待 I/O、锁竞争、网络响应或阻塞调用时,调用栈仍可能出现在采样结果里。cpu 模式只关注线程主动执行 CPU 的时间,更适合回答“代码到底把处理器花在哪里”。

这也是为什么两种模式不能简单互换:一个接口的 wall 结果很高,可能是数据库或网络等待;切到 cpu 后占比下降,反而说明瓶颈在外部等待而不是 Python 计算。采样结果由样本次数估算,短函数可能刚好没有被采到。

目标进程、profiling.sampling、wall-clock、CPU time 与采样样本的静态边界说明图
图1:观测边界说明图,比较 wall-clock、CPU time 与 tracing 的静态关系;这是原创说明图,不是运行截图。

用最小命令把两种模式分开

先用默认 wall 模式观察完整的经过时间。下面的示例是命令写法,评论说明了参数目的;这里不把示例输出当成真实运行证据。

# wall 模式包含 I/O 等待,适合先找整体耗时来源
python -m profiling.sampling run --mode wall -d 30 --flamegraph -o wall-profile.html app.py

# cpu 模式只聚焦主动计算,适合确认 Python 计算热点
python -m profiling.sampling run --mode cpu -d 30 --pstats app.py

run 适合从脚本启动时开始观察;如果进程已经在运行,则用 attach 连接 PID。生产排障通常先选较短的观察窗口,再根据样本量决定是否延长,而不是一开始就把采样率调到很高。

# 连接已有进程,wall 先看真实请求期间的总耗时
python -m profiling.sampling attach --mode wall -d 30 12345

# 同一个进程再看 cpu,比较主动计算与等待的差异
python -m profiling.sampling attach --mode cpu -d 30 --pstats 12345

如果需要函数级表格,选 pstats;想快速查看调用层次,可选 flamegraph。输出格式改变的是阅读方式,不会把统计采样变成精确计时。

按问题信号选择入口和输出

可以把选择压缩成三类。第一类是接口、任务或服务“总耗时变长”,先使用 wall,因为 I/O 和阻塞本身就是用户等待时间的一部分。第二类是 wall 很高但怀疑 Python 计算过重,再用 cpu 排除等待,把注意力集中到 CPU 热点。第三类是已经知道生产进程的 PID,需要在不改代码的情况下观察,则从 attach 开始。

如果要同时观察线程池中的线程,可以加入 --all-threads;如果要分析异步任务的栈,则根据目标选择 --async-aware。这些参数扩大观察范围,但不改变 wall 与 cpu 的定义。

I/O 等待、CPU 计算、生产进程、run、attach、wall 模式、cpu 模式和输出格式的静态关系图
图2:模式选择关系图,查看问题类型、命令入口和结果格式的静态边界;这是原创说明图,不是运行截图。
现象优先模式原因
接口等待网络、磁盘或锁wall保留现实经过时间中的等待部分
纯计算占用 CPUcpu排除 I/O 等待后看主动计算热点
生产进程已有 PIDattach从现有进程开始采样,不要求改代码或重启
需要精确调用次数tracing采样只能估算频率,不能给出完整调用计数

采样结果怎样复查才不容易误判

第一,观察时间太短时,样本数量不足,结果会有较大波动;可以延长持续时间,或者让短脚本重复运行以获得更多样本。第二,生产分析要用具有代表性的负载,峰值流量和空闲流量都可能把结论带偏。第三,profiling 工具与被连接的目标进程需要使用同一个 Python 小版本,不能用 Python 3.14 的分析器连接 Python 3.15 进程。

最后记住三条边界:wall 是用户视角的耗时线索,cpu 是处理器视角的热点线索,tracing 或 timeit 才适合精确调用和微基准问题。先用 wall 定位大方向,再用 cpu 缩小计算范围,通常比只盯一份百分比更稳妥。

相关问题

wall 模式很高是不是 Python 代码慢?不一定,网络、磁盘、锁和外部服务等待都会抬高 wall;需要用 cpu 做对照。

cpu 模式能代替 timeit 吗?不能。cpu 是运行期间的统计采样,适合找热点;比较几微秒级差异时,应使用 timeit。

为什么两次采样的百分比不完全一样?采样是统计估计,样本数量、负载和线程调度都会造成小幅波动,应关注稳定的热点形状。

总结来说,wall 和 cpu 的选择取决于你要解释的是“用户等了多久”还是“处理器算了多久”。先明确边界,再组合 run 或 attach 与合适的输出格式,最后用持续时间、负载和 Python 小版本复查结论。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Java 线程池队列过长怎样设置背压Java 线程池队列过长怎样设置背压
上一篇
Java 线程池队列过长怎样设置背压
Python 3.15 延迟导入怎样评估启动收益
下一篇
Python 3.15 延迟导入怎样评估启动收益
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    471次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    530次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    549次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    499次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    317次使用