Python程序的性能分析指南
2015-11-05 11:19
411 查看
分析一个程序的性能,总结下来就是要回答4个问题:
它运行的有多快?
它的瓶颈在哪?
它占用了多少内存?
哪里有内存泄漏?
接下来,我们会着手使用一些很棒的工具,来帮我们回答这些问题。
我们先来用个很快的方法来给我们的代码计时:使用unix的一个很好的功能 time。
关于这3个测量值的具体含义可以看StackOverflow上的帖子,但是简要的说就是:
real:代表实际花费的时间
user::代表cpu花费在内核外的时间
sys:代表cpu花费在内核以内的时间
通过把sys和user时间加起来可以获得cpu在你的程序上花费的时间。
如果sys和user加起来的时间比real时间要小很多,那么你可以猜想你的程序的大部分性能瓶颈应该是IO等待的问题。
我接下来要使用的技术就是让你的代码仪器化以让你获得细粒度的时间信息。这里是一个计时方法的代码片段:
为了使用它,将你想要测量时间的代码用Python关键字with和Timer上下文管理器包起来。它会在你的代码运行的时候开始计时,并且在执行结束的完成计时。
下面是一个使用它的代码片段:
我会经常把这些计时器的输入记录进一个日志文件来让我知道程序的性能情况。
文章摘选自:http://blog.jobbole.com/47619/
详细内容还是请参考原文。
它运行的有多快?
它的瓶颈在哪?
它占用了多少内存?
哪里有内存泄漏?
接下来,我们会着手使用一些很棒的工具,来帮我们回答这些问题。
粗粒度的计算时间
我们先来用个很快的方法来给我们的代码计时:使用unix的一个很好的功能 time。real:代表实际花费的时间
user::代表cpu花费在内核外的时间
sys:代表cpu花费在内核以内的时间
通过把sys和user时间加起来可以获得cpu在你的程序上花费的时间。
如果sys和user加起来的时间比real时间要小很多,那么你可以猜想你的程序的大部分性能瓶颈应该是IO等待的问题。
用上下文管理器来细粒度的测量时间
我接下来要使用的技术就是让你的代码仪器化以让你获得细粒度的时间信息。这里是一个计时方法的代码片段:下面是一个使用它的代码片段:
文章摘选自:http://blog.jobbole.com/47619/
详细内容还是请参考原文。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法