Python 性能剖分工具
Python 性能剖分工具
眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在开发中屡见不鲜。接下来的工作就是加班加点地找出性能瓶颈,然后进行优化,再进行性能测试,如此这般周而复始直到通过性能测试。尽管丰富的工作经验有助于性能优化,但只有科学地应用工具才能在最短的时间内找出最佳优化粒度的瓶颈代码段,达到事半功倍的效果。
profile、cProfile与hotshot
Python 内置了丰富的性能优化工具来帮助我们定位性能瓶颈,如:profile、cProfile和 hotshot。它们易于使用,而且有完备的支持文档可供参考。下面以最常用的 profile 模块为例来说明它们的使用方法,假定要剖分的脚本文件为 foo.py ,它的内容如下:
def foo():
sum = 0
for i in range(100):
sum += i
return sum
if __name__ == "__main__":
foo()
对 foo.py 进行性能剖分的方法之一是修改 foo.py 里的 if 程序块,引入 profile 模块:
if __name__ == "__main__":
import profile
profile.run("foo()")
然后执行 foo.py 即可完成性能剖分,剖分结果将以文本报表的形式打印到标准输出。
因为上述方法需要修改 foo.py 文件,所以我们通常更倾向于使用无需修改源文件的方法——就是在命令行中用应用 python 的 –m 参数来执行 profile :
python –m profile foo.py
除了可以使用 profile 模块外,还可以使用 cProfile 模块。cProfile由 C 语言实现,是剖分代价更低的剖分器,有和 profile 模块相同的接口,但只能用于2.5或以上版本。Python 另一个内置的剖分器是 hotshot,但是 hotshot 模块已经不再推荐使用,因为将来它可能会被移出标准库。
pstats
无论使用哪个剖分器,它的剖分数据都可以保存到二进制文件,如foo.prof。分析和查看剖分结果文件需要使用 pstats 模块,它极具伸缩性,可以输出形式多样的文本报表,是文本界面下不可或缺的工具。
使用 pstats 分析剖分结果很简单,几行代码就可以了:
import pstats
p = pstats.Stats("foo.prof")
p.sort_stats("time").print_stats()
运行上述脚本将输出结果为按函数内部运行时间(不计调用子函数的时间)长短排序的报表。
sort_stats() 方法是 pstats.Stats 最重要的方法之一,它用以对剖分数据进行排序。sort_stats() 接受一个字符串参数,这个字符串标识了排序的字段,常用的可选的参数及其意义如下:
|
‘ncalls’ |
被调用次数 |
|
‘cumulative’ |
函数运行的总时间 |
|
‘nfl’ |
Name/file/line |
|
‘time’ |
函数内部运行时间(不计调用子函数的时间) |
除了 sort_stats() 外, pstats.Stats 还有 print_callees() 和 print_callers() 方法用以输出指定函数所调用的函数和调用过指定函数的函数。
除了编编程接口外,pstats 还提供了友好的命令行交互环境,在命令行执行 python –m pstats 就可以进入交互环境,在交互环境里可以使用 read/add 指令读入/加载剖分结果文件,stats 指令用以查看报表, callees 和 callers 指令用以查看特定函数的被调用者和调用者。下图是 pstats 的截图,标识了它的基本使用方法:
from :http://blog.csdn.net/gzlaiyonghao/article/details/2120147
Python 性能剖分工具的更多相关文章
- Python性能分析工具Profile
Python性能分析工具Profile 代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 ...
- python性能检测工具整理
python 运行后出现core dump产生core.**文件,可通过gdb来调试 Using GDB with a core dump having found build/python/core ...
- Python 性能分析工具简介
Table of Contents 1. 性能分析和调优工具简介 1.1. Context Manager 1.2. Decorator 1.3. 系统自带的time命令 1.4. python ti ...
- 安装python性能检测工具line_profiler
line_profiler是一款监测python的CPU密集型性能问题的强大工具,可以对函数进行逐行分析,在linux上安装时一切正常,然而今天在win10 64位系统安装失败了 pip3 insta ...
- cProfile——Python性能分析工具
Python自带了几个性能分析的模块:profile.cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的.本文介绍cProfile. 例子 import t ...
- Python性能分析工具
import cProfile import pstats from flask import Flask,jsonify, request @app.route("/test", ...
- Python性能分析
Python性能分析 https://www.cnblogs.com/lrysjtu/p/5651816.html https://www.cnblogs.com/cbscan/articles/33 ...
- Python测试 ——开发工具库
Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...
- python测试开发工具库汇总(转载)
Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...
随机推荐
- 四,前端---constructor与prototype
这里对于constructor 和 prototype做一个简单的介绍,旨在让大家有一个简单的了解与认识 1:定义与用法 prototype:属性使您有能力向对象添加属性和方法. constructo ...
- JS 语言核心(JavaScript权威指南第六版)(阅读笔记)
前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...
- 031718-js变量、数据类型、运算符
1.关键字.标识符.变量(是一个名称,最好用字母开头,对大小写敏感).常量 (是有数据类型的一个值) 变量: ①定义并赋值 ②使用 2.数据类型:数字 字符串 布尔 null undefi ...
- Jenkins持续集成演示
1.去我们的仓库修改一下代码 为了节约时间,我直接在网页上改了. 我们把布局页的footer信息改一下: 然后提交. 2.切换到Jenkins可以看到已经在构建了 等待构建完成. 3.访问我们部署的地 ...
- cd
从当前目录切换到目标目录 cd [目标目录] 切换到用户主目录 cd cd~ 切换到根目录 cd / 切换到上级目录 cd .. cd ../ cd ..// 切换到上级目录的父目录 ...
- [ZJOI 2013]丽洁体
Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...
- 【BZOJ1059】【ZJOI2007】矩阵游戏
Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...
- 【USACO】 洞穴奶牛
题目描述 贝西喜欢去洞穴探险.这次她去的地方由 N 个洞穴组成,编号分别是 1 到 N,1 号洞穴是出发 的起点. 洞穴之间由 M 条隧道相连,双向通行,第 i 条隧道连接 A i 和 B i .每条 ...
- NOIP2014-5-24模拟赛
Problem 1 护花(flower.cpp/c/pas) [题目描述] 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时 ...
- CTSC2017 铁牌记
Day 0: 先到了丽都酒店. 看见北京八十中学生在发胸牌手册和T恤,领完之后开始分房间. 我和ryc一屋,lyd和ysq一屋,yzy和gzz分到了珀利酒店,老师尝试了半天把我们分到一个酒店,失败了. ...