cProfile是标准库内建的分析工具的其中一个,另外两个是hotshot和profile

#-s cumulative -s cumulative开关告诉cProfile对每个函数累计花费的时间进行排序,他能让我看到代码最慢的部分。 我们有这样一个函数。 loopdemo.py

def foo():

for a in range(0, 101):

for b in range(0, 101):

if a + b == 100:

yield a, b

if __name__ == '__main__':

for item in foo():

print(item)

运行下面命令

python3 -m cProfile -s cumulative loopdemo.py

得到如下结果

206 function calls in 0.001 seconds

#在0.01秒内共发生了206次函数调用。包括cProfile的开销。

Ordered by: cumulative time

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.001 0.001 {built-in method builtins.exec}

1 0.000 0.000 0.001 0.001 loopdemo.py:7()

102 0.001 0.000 0.001 0.000 loopdemo.py:7(foo)

101 0.001 0.000 0.001 0.000 {built-in method builtins.print}

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

其中对参数的解释: ncalls:表示函数调用的次数; tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间; percall:(第一个percall)等于 tottime/ncalls; cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间; percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls; filename:lineno(function):每个函数调用的具体信息; 需要注意的是cProfile很难搞清楚函数内的每一行发生了什么,是针对整个函数来说的。 ###-o profile.stats 我们可与你通过这个函数将结果输出到一个文件中,当然文件的后缀名是任意的,这里为了方便后面配合python中使用所以将后缀定为stats。 首先让我们运行下面的命令

python3 -m cProfile -o loopdemo_profile.stats loopdemo.py

然后运行下面的脚本

import pstats

p=pstats.Stats("loopdemo_profile.stats")

p.sort_stats("cumulative")

p.print_stats()

p.print_callers() # 可以显示函数被哪些函数调用

p.print_callees() # 可以显示哪个函数调用了哪些函数

可以看到输出了和之前控制台一样的结果

2006 function calls in 0.005 seconds

Ordered by: cumulative time

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.005 0.005 {built-in method builtins.exec}

1 0.000 0.000 0.005 0.005 loopdemo.py:7()

1001 0.004 0.000 0.004 0.000 {built-in method builtins.print}

1002 0.000 0.000 0.000 0.000 loopdemo.py:30(foo2)

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

Ordered by: cumulative time

Function was called by...

ncalls tottime cumtime

{built-in method builtins.exec}

loopdemo.py:7()

{built-in method builtins.print} )

loopdemo.py:30(foo2) )

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

Ordered by: cumulative time

Function called...

ncalls tottime cumtime

{built-in method builtins.exec} -> 1 0.000 0.005 loopdemo.py:7()

loopdemo.py:7() -> 1002 0.000 0.000 loopdemo.py:30(foo2)

1001 0.004 0.004 {built-in method builtins.print}

{built-in method builtins.print} ->

loopdemo.py:30(foo2) ->

{method 'disable' of '_lsprof.Profiler' objects} ->

###line_profiler 安装

pip3 install Cpython

pip3 install Cython git+https://github.com/rkern/line_profiler.git

哪些模块可用于python性能分析_python性能分析之cProfile模块相关推荐

  1. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费.今天就为大家带来七个可以提升python程序性能的好习惯,赶快来学习吧:. 1.使用局部变量 尽量使用局部变量代替全局变量:便 ...

  2. python性能差_Python 性能分析大全

    虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...

  3. python处理日志_python日志处理(logging模块)

    文章非原创,搬运自@云游道士博客: 另外,这篇文章可以作为参考: 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用 ...

  4. python数据获取与文本分析_python文本分析之处理和理解文本

    前言: 在进行自然语言的建模(NLP)时,我们通常难以处理文字类型的数据,因此在常见的机器学习项目中,数据的格式是结构化的,就算在视觉处理的时候也是一个矩阵或者高维张量的形式.那么文字类型的数据我们应 ...

  5. python——pickle模块(用于Python对象的持久化存储)

    pickle模块介绍 pickle是一种用于存储的持久化技术 首先从英文来理解一下这个模块:pickle 是腌渍的意思,也就是把东西腌起来保存成文件,要用的时候读出来洗洗还能用. 专业点的说法是:pi ...

  6. python getopt使用_Python命令行参数解析模块getopt使用实例

    这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参考下 格式 getopt(args, options ...

  7. python jsonpath库_Python爬虫(十六)_JSON模块与JsonPath

    本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...

  8. 哪些模块可用于python性能分析_Python调用C模块以及性能分析

    一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wch ...

  9. 哪些模块可用于python性能分析_4-Python内置类型性能分析

    ![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## 代码执行时间测量模块 ...

最新文章

  1. 面试官:你分析过mybatis工作原理吗?
  2. yii mysql 事务处理_Yii2中事务的使用实例代码详解
  3. 百万奖金 !「悟道之巅」AI创新应用大赛,开幕!
  4. C#笔记24:善用Visual Studio
  5. python全栈开发基础【第二十三篇】线程
  6. (54)线程结构体 ETHREAD,线程断链
  7. 生成对抗网络gan原理_生成对抗网络(GAN)的半监督学习
  8. hadoop-0.21.0 在Windows环境下的部署(1)Cygwin 安装
  9. jvm的client与server工作模式
  10. vs未能找到程序集platform.winmd_PP体育直播大连人VS恒大:新老8冠王首尾对决竟有十大看点...
  11. 一键生成通讯录的软件_橙瓜码字自动写作软件,外貌描写对话描写一键生成
  12. 个人简介页面如何设计?优秀案例给你灵感
  13. Crontab使用心得
  14. html查看今天星期几,jquery怎么获取星期几
  15. 外卖点餐管理系统源码
  16. Found multiple @SpringBootConfiguration annotated classes
  17. Android adb: failed to install 0.apk: Failure [null]
  18. 【原创】关于Golang和Rust对比及语言的选择思考
  19. 仿ifeng可翻阅上下滚动新闻
  20. 花卉识别卷积神经网络

热门文章

  1. android gridview滑动监听,Android GridView 滑动条设置一直显示状态(推荐)
  2. TCP流模式与UDP数据报模式
  3. OpenCV案例(二):选取圆对象
  4. Linux(CentOS7.1)修改默认yum源为国内的阿里云yum源
  5. [转载]Android系统上(mv不可用)cp命令的替代方法
  6. Android 自定义组合控件小结
  7. NSIS制作安装包实例
  8. eclipse中常见快捷键
  9. GigaSpaces Grid for dataBase Cashing
  10. Bailian2933 停车场收费【水题】