Python脚本性能分析
来自:http://www.cnblogs.com/btchenguang/archive/2012/02/03/2337112.html
def foo():
sum = 0
for i in range(10000):
sum += i
sumA = bar()
sumB = bar()
return sum def bar():
sum = 0
for i in range(100000):
sum += i
return sum if __name__ == "__main__":
import cProfile #直接把分析结果打印到控制台
cProfile.run("foo()")
#把分析结果保存到文件中,不过内容可读性差...需要调用pstats模块分析结果
cProfile.run("foo()", "result")
#还可以直接使用命令行进行操作
#>python -m cProfile myscript.py -o result import pstats
#创建Stats对象
p = pstats.Stats("result")
#这一行的效果和直接运行cProfile.run("foo()")的显示效果是一样的
p.strip_dirs().sort_stats(-1).print_stats()
#strip_dirs():从所有模块名中去掉无关的路径信息
#sort_stats():把打印信息按照标准的module/name/line字符串进行排序
#print_stats():打印出所有分析信息 #按照函数名排序
p.strip_dirs().sort_stats("name").print_stats() #按照在一个函数中累积的运行时间进行排序
#print_stats(3):只打印前3行函数的信息,参数还可为小数,表示前百分之几的函数信息
p.strip_dirs().sort_stats("cumulative").print_stats(3) #还有一种用法
p.sort_stats('time', 'cum').print_stats(.5, 'foo')
#先按time排序,再按cumulative时间排序,然后打倒出前50%中含有函数信息 #如果想知道有哪些函数调用了bar,可使用
p.print_callers(0.5, "bar") #同理,查看foo()函数中调用了哪些函数
p.print_callees("foo")
运行:python -m cProfile t12.py,打印结果:
其中,输出每列的具体解释如下:(http://xianglong.me/article/analysis-python-application-performance-using-cProfile/)
ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;
另外,上面分析的时候,排序方式使用的是函数调用时间(cumulative),除了这个还有一些其他允许的排序方式:calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time等
# 增加排序方式
python -m cProfile -s cumulative
t2
.py #按照cumulative排序
Python脚本性能分析的更多相关文章
- Python脚本性能剖析
################### #Python脚本性能剖析 ################### cProfile/profile/hotshot用于统计Python脚本各部分运行频率和耗费 ...
- 使用 profile 进行python代码性能分析
定位程序性能瓶颈 对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,c ...
- Python, Django 性能分析工具的使用
最近接手的 Apache HUE 项目性能出现了问题,线上经常出现响应时间过长或因为时间过长而无法服务等问题.老大让我准备弄个性能分析工具,便于追踪和分析平台当前的瓶颈出现在哪里. 那就搞起吧!先从代 ...
- python 代码性能分析 库
问题描述 1.Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢: 2.Python开发的程序在使用过程中占用内存很大,想确定下是哪段代码引起的: 解决方案 使用profile分析分析c ...
- python 函数性能分析
1 使用profile分析函数性能示例1, 以profile为例: import profile def profileTest(): Total =1; for i in range(10): To ...
- python profile性能分析
#! /usr/bin/env python # encoding=utf8 import profile def func1(): for i in range(1000): pass def fu ...
- Python性能分析与优化PDF高清完整版免费下载|百度云盘
百度云盘|Python性能分析与优化PDF高清完整版免费下载 提取码:ubjt 内容简介 全面掌握Python代码性能分析和优化方法,消除性能瓶颈,迅速改善程序性能! 对于Python程序员来说,仅仅 ...
- 关于Python Profilers性能分析器
1. 介绍性能分析器 作者:btchenguang profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProf ...
- python——关于Python Profilers性能分析器
1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...
随机推荐
- Solidity之mapping类型
映射是一种引用类型,存储键值对.它的定义是:mapping(key => value),概念上与java中的map,python中的字典类型类似,但在使用上有比较多的限制. 一.mapping定 ...
- xml Schema include
first.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs=&q ...
- Docker: vmware企业级docker镜像私服--Harbor的搭建
1.下载harbor,地址https://github.com/vmware/harbor2.进入harbor-master/Deploy目录,修改harbor.cfg文件,主要修改以下信息 ...
- Java 8 新特性-菜鸟教程 (4) -Java 8 默认方法
Java 8 默认方法 Java 8 新增了接口的默认方法. 简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法. 我们只需在方法名前面加个default关键字即可实现默认方法. 为 ...
- 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)
目录 描述 解法一:排序算法(不满足时间复杂度要求) Java 实现 Python 实现 复杂度分析 解法二:最小堆 思路 Java 实现 Python 实现 复杂度分析 解法三:桶排序(bucket ...
- DispatcherServlet源码注解分析
DispatcherServlet的介绍与工作流程 DispatcherServlet是SpringMVC的前端分发控制器,用于处理客户端请求,然后交给对应的handler进行处理,返回对应的模型和视 ...
- C#取整函数Math.Round、Math.Ceiling和Math.Floor 【非原创,用来收藏,分享】
1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) / ...
- 【MongoDB-MongoVUE图像管理工具】
介绍一款很不错的开源的MongoDB图形化管理工具:MongoVUE . MongoVUE 1.6.9 破解版,下载地址.
- angular项目使用Swiper组件Loop时 ng-click点击事件失效处理方法
在Angular项目中,使用swiper组件进行轮播展示时,存在将swper的loop设置为true时,部分页面的ng-click失效. 原因:将swiper中的looper设置为true时,为了视觉 ...
- .NET Core类库中读取配置文件
最近在开发基于.NET Core的NuGet包,遇到一个问题:.NET Core中已经没有ConfigurationManager类,在类库中无法像.NET Framework那样读取App.conf ...