cProfile生成二进制结果文件

cProfile模块提供一个功能,可以将profile结果保存为二进制文件

通过cProfile命令行生成二进制结果文件: python -m cProfile -o result.out foobar.py

通过cProfile代码生成二进制结果文件: cProfile.run(“foo()”, filename=”result.out”)

pstats模块

Python提供了一个pstats模块,用来分析cProfile输出的文件内容。

需要导入pstats模块, import pstats

通过加载result.out来创建Stats对象,然后调用Stats对象的方法来打印profile结果

举个栗子

首先使用上一篇的代码,生成result.out文件

使用pstats模块的代码如下

# 创建Stats对象

p = pstats.Stats("result.out")

# strip_dirs(): 去掉无关的路径信息

# sort_stats(): 排序,支持的方式和上述的一致

# print_stats(): 打印分析结果,可以指定打印前几行

# 按照函数名排序,只打印前3行函数的信息, 参数还可为小数,表示前百分之几的函数信息

p.strip_dirs().sort_stats("name").print_stats(3)

# 按照运行时间和函数名进行排序

p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.8)

# 如果想知道有哪些函数调用了bar

p.print_callers("bar")

# 查看test()函数中调用了哪些函数

p.print_callees("foo")

输出结果如下

Sun Mar 25 16:37:01 2018 result.out

15 function calls in 0.227 seconds

Ordered by: function name

List reduced from 5 to 3 due to restriction <3>

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

1 0.000 0.000 0.227 0.227 :1()

7 0.039 0.006 0.039 0.006 {range}

Sun Mar 25 16:37:01 2018 result.out

15 function calls in 0.227 seconds

Ordered by: cumulative time, function name

List reduced from 5 to 4 due to restriction <0.8>

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.227 0.227 :1()

1 0.004 0.004 0.227 0.227 foobar.py:13(foo)

5 0.184 0.037 0.223 0.045 foobar.py:6(bar)

7 0.039 0.006 0.039 0.006 {range}

Ordered by: cumulative time, function name

List reduced from 5 to 2 due to restriction <'bar'>

Function was called by...

ncalls tottime cumtime

foobar.py:13(foo) <- 1 0.004 0.227 :1()

foobar.py:6(bar) <- 5 0.184 0.223 foobar.py:13(foo)

Ordered by: cumulative time, function name

List reduced from 5 to 2 due to restriction <'foo'>

Function called...

ncalls tottime cumtime

foobar.py:13(foo) -> 5 0.184 0.223 foobar.py:6(bar)

2 0.001 0.001 {range}

foobar.py:6(bar) -> 5 0.038 0.038 {range}

结果列的含义如下

ncalls:表示函数调用的次数;

tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;

percall:(第一个percall)等于 tottime/ncalls;

cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;

percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;

filename:lineno(function):每个函数调用的具体信息;

代码下载

本系列文章和代码已经作为项目归档到github,仓库地址:jumper2014/PyCodeComplete。大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。什么?你没有github账号?学习Python怎么可以没有github账号呢,快去注册一个啦!

python自动测试p-Python实践60-性能调优之pstats模块相关推荐

  1. hbase原理与实践_HBase 性能调优第一弹:内存篇

    这是使用 HBase 最不可避免的一个话题,就是 HBase 的性能调优,而且通常建立在我们对 HBase 内部运行机制比较了解的基础上进行的,因此无论怎么说,调优这块都是一个相对复杂的事情.这一篇我 ...

  2. 阿里出品的这份Java性能调优实战手册,直接涨薪25K,真的香啊

    现在,网站和应用程序的功能越来越丰富了,对网络和设备性能的要求自然也越来越高.因此,实现高水平的系统性能,逐渐成为每一位程序员不可或缺的底层能力.可是,传统的性能优化视角,更多的是从问题与测量数据的角 ...

  3. python自动测试ping IP

    python自动测试ping IP,将不通的IP保存到txt中. # -*- coding: utf-8 -*- # @Time : 2023/3/6 9:14 # @Author : JulyLi ...

  4. python 断点重传_性能调优-python SDK 调优

    python SDK python 和 java 或者和 GO ,在性能上来说都不是最好的,而且 python 无法支持多核的并发,只能跑在单核上的多线程.但是 oss 也提供了相应的方法提高多线程的 ...

  5. 【Python】这10个Python性能调优的小技巧,你知道几个?

    这篇文章关于Python性能调优的10个小技巧,每天花5-10分钟阅读我的文章,对你技术提升一定会有帮助. 1 多多使用列表生成式 替换下面代码: cube_numbers = []for n in ...

  6. python 性能优化监控工具_推荐一款非常实用的JVM性能调优监控工具(亲测好用)...

    前言 现实企业级Java开发中,有时候我们会碰到下面这些问题: 1.OutOfMemoryError,内存不足 2.内存泄露 3.线程死锁 4.锁争用(Lock Contention) 5.Java进 ...

  7. 【Elasticsearch】es 5.3.0 bulk index 性能调优实践

    1.概述 转载:elasticsearch5.3.0 bulk index 性能调优实践 一.集群基本信息 每天日志量70亿 ES版本: 5.3.0 机器部署 master node: 3台 data ...

  8. 【Elasticsearch】eBay上的Elasticsearch性能调优实践

    1.概述 翻译:eBay上的Elasticsearch性能调优实践 中文版:eBay上的Elasticsearch性能调优实践 Elasticsearch 是一个基于 Apache Lucene 的开 ...

  9. eBay的Elasticsearch性能调优实践

    https://www.sohu.com/a/220443841_467759 Elasticsearch 是一个基于 Apache Lucene 的开源搜索和分析引擎,允许用户近实时地存储.搜索和分 ...

最新文章

  1. 编程自动化,未来机器人将超越人类?
  2. 第五章 有限脉冲响应滤波器(ba,我终于懂FIR滤波器了)
  3. SpringMVC 参数解析器
  4. 使用flex布局把三个元素分配成两列,第二列垂直布局两个元素
  5. 宝剑锋从磨砺出——使用在线评测平台磨砺C#使用能力
  6. JS设计模式(2)策略模式
  7. ES6箭头函数(节选自《ECMAScript 6 入门》)
  8. SqlServer-函数
  9. MyEclipse配置进行Hibernate逆映射
  10. PHP 500 -Invalid command RewriteEngine的解决
  11. 最简单的STM32入门教程----闪烁LED
  12. java selector wakeup_java – 如何检测Selector.wakeup调用
  13. linux 模拟误码率,基于System View的比特误码率测试的仿真研究
  14. SharedPreferences存储图片对象与获取
  15. php取word表格一行内容,如何提取出word表格中的内容 值得一看
  16. 深入理解搜索引擎——详解query理解
  17. FatFs文件系统移植过程及中度分析
  18. 福昕PDF阅读器又更新了,终于等到这个功能了!
  19. python叠加等边三角形的绘制
  20. Codeforces Round #416 (Div. 2)

热门文章

  1. 清除Windows Server 2008上的休眠文件”hiberfil.sys”
  2. 安装Nginx过程中,使用make时出现 make: *** 没有规则可以创建“default”需要的目标“build”...
  3. 02.规划过程组表格-采购管理计划
  4. 旋转动画 rotate
  5. 【代码笔记】iOS-自定义弹出框
  6. ADO.NET 快速入门(一):ADO.NET 概述
  7. iOS 录音功能的实现
  8. 最佳实践 ADO.NET实用经验无保留曝光
  9. java和python可以在一个项目中同时使用么-可以同时用python和java开发一个app吗?...
  10. python有趣小程序 表白-抖音最火的整蛊表白小程序如何做出来的?教你用python做出...