如何限制cProfile输出仅展示自有代码?可设置调用日志层级吗?
cProfile自定义输出范围的实现方案
你提到的两类需求都可以通过pstats模块的过滤、定向查询功能实现,具体操作如下:
1. 仅展示自有代码的调用统计
不用直接调用print_stats输出全量结果,先实例化pstats.Stats对象后添加过滤规则即可:
import cProfile import pstats from pathlib import Path pr = cProfile.Profile() pr.enable() testrun() pr.disable() # 初始化统计对象 stats = pstats.Stats(pr) # 过滤规则示例:仅保留当前脚本内的函数调用,排除内置函数、第三方库调用 current_script = Path(__file__).name stats.filter(lambda stat_entry: current_script in stat_entry.filename) # 排序后输出结果 stats.sort_stats('time').print_stats()
如果只需要和testrun相关的条目,把过滤规则替换为lambda stat_entry: 'testrun' in stat_entry.name即可。
2. 限制展示的调用层级
原生pstats没有直接的层级参数,但可以通过定向查询调用关系实现层级限制:
- 若要查看2级调用(仅
testrun本身+它直接调用的函数),使用print_callees方法:stats.sort_stats('time').print_callees('testrun') - 若要查看3级调用,再额外查询上一步返回的所有被调函数的下级调用即可。
如果需要更灵活的查询,可以先把统计结果导出到本地文件:pr.dump_stats('profile_result.prof'),之后在终端执行python -m pstats profile_result.prof进入交互式统计界面,可直接输入过滤、排序、层级查询命令操作。
内容的提问来源于stack exchange,提问作者sjd
相关产品推荐
相关产品推荐

