【PYTHON教程】你的程序运行有多快?

2017-11-16 23:29:05 织梦安装使用
  • 文章介绍
“社会科学中的数据可视化”第197篇推送


分析一个程序的性能首先需要考虑的就是程序运行速度。下面,我们将用一些很酷的工具,深入细节地回答这一问题。

使用time工具粗糙定时
首先,我们可以使用快速然而粗糙的工具:古老的unix工具time,来为我们的代码检测运行时间。
上面三个输入变量的意义在文章 stackoverflow article 中有详细介绍。简单的说:

real – 表示实际的程序运行时间
user – 表示程序在用户态的cpu总时间
sys – 表示在内核态的cpu总时间
通过sys和user时间的求和,你可以直观的得到系统上没有其他程序运行时你的程序运行所需要的CPU周期。

若sys和user时间之和远远少于real时间,那么你可以猜测你的程序的主要性能问题很可能与IO等待相关。

使用计时上下文管理器进行细粒度计时
我们的下一个技术涉及访问细粒度计时信息的直接代码指令。这是一小段代码,可以看到专门的计时测量是非常重要的:
为了使用它,你需要用Python的with关键字和Timer上下文管理器包装想要计时的代码块。它将会在你的代码块开始执行的时候启动计时器,在你的代码块结束的时候停止计时器。

这是一个使用上述代码片段的例子:
经常将这些计时器的输出记录到文件中,这样就可以观察程序的性能如何随着时间进化。

使用分析器逐行统计时间和执行频率
Robert Kern有一个称作line_profiler的不错的项目,我经常使用它查看我的脚步中每行代码多快多频繁的被执行。

想要使用它,你需要通过pip安装该python包:
一旦安装完成,你将会使用一个称做“line_profiler”的新模组和一个“kernprof.py”可执行脚本。

想要使用该工具,首先修改你的源代码,在想要测量的函数上装饰@profile装饰器。不要担心,你不需要导入任何模组。kernprof.py脚本将会在执行的时候将它自动地注入到你的脚步的运行时。
一旦你已经设置好了@profile装饰器,使用kernprof.py执行你的脚步。
l选项通知kernprof注入@profile装饰器到你的脚步的内建函数,-v选项通知kernprof在脚本执行完毕的时候显示计时信息。上述脚本的输出看起来像这样:

简单来说,这一方法的关键就是寻找具有高Hits值或高Time值的行,因为这些就是可以通过优化带来最大改善的地方。


无论是time工具还是更加高级的分析器,其核心思想都在于寻找出你程序中的短板进而修正。你的程序运行究竟有多快?不妨用上述方法尝试着检验一番。

原文来源:伯乐在线,部分文字进行删减。
原文请点击左下“阅读原文



投诉

上一篇:Python股市数据分析教程(Part 2)..

下一篇:Keras 教程: Python 深度学习终极入..

专业的织梦模板定制下载站,在线购买后即可下载!

商业源码

跟版网模板,累计帮助5000+客户企业成功建站,为草根创业提供助力!

立刻开启你的建站之旅

QQ在线客服

服务热线

织梦建站咨询