Python脚本分析CPU使用情况

2017 年 7 月 31 日 炼数成金订阅号 buhaoxuesheng 译

在这篇文章中,我将讨论一个工具,用以分析Python中CPU使用情况。CPU分析是通过分析CPU执行代码的方式来测量代码的性能,以此找到代码中的不妥之处,然后处理它们。


接下来我们将看看如何跟踪Python脚本使用时CPU使用情况,重点关注以下几个方面:

    1、cProfile

    2、line_profiler

    3、pprofile

    4、vprof


测量CPU使用率

对于这篇文章,我将主要使用与内存分析中使用脚本相同的脚本,具体如下:


cProfile

在讨论CPU分析时,最常用的工具之一是cProfile,主要是因为它内置在CPython2和PyPy2中。这是一个确定性的分析器,意味着在运行程序时会收集一组统计数据,例如我们代码的各个部分的执行次数或执行时间。此外,cProfile在系统上的开销比其他内置的分析器(配置文件)要低。

其输出如下:

即使使用这个文本输出,很容易看到我们的脚本多次调用了list.append方法。

如果我们使用gprof2dot,我们可以以图形的方式看到cProfile输出。要使用它,我们必须首先安装graphviz,之后是一些依赖包,最后在Ubuntu上使用如下命令:

我们得到以下output.png文件:

这样更容易看到一切。我们来仔细看看它的输出。您可以看到脚本中的函数调用如下:

    1、第一行:Python文件名,行号和方法名称

    2、第二行:代码块占用全部时间的百分比

    3、第三行:括号中,方法本身占全部时间的百分比

    4、第四行:调用函数的次数


例如,在顶部的第三个红色方块中,方法primes占用了98.28%的时间,其中65.44%的内容在其中进行,调用了40次。其余的时间花在Python中的list.append(22.33%)和range(11.51%)中。


作为一个简单的脚本,我们只需要重写我们的脚本,具体的如下所示:


您还可以以编程方式使用cProfile,例如:

这在某些情况下很有用,例如多进程性能测量

line_profiler

此分析器在行级提供关于工作负载的信息。它使用Cython在C中实现,并将其与cProfile进行比较时发现其具有较小的开销。

源代码可以在这里找到,也可以在这里找到PyPI页面。与cProfile相比,它具有一样的开销,不过却要花费12倍的时间来获取配置文件。

要使用它,您需要先通过pip添加它:pip install pip install Cython ipython == 5.4.1 line_profiler(CPython2)。这个分析器的一个主要缺点是它不支持PyPy。

就像使用memory_profiler一样,您需要在要分析的函数中添加一个装饰器。在我们的例子中,您需要在03.primes-v1.py中定义我们的primes函数之前添加@profile。然后调用它:

你将得到如下输出:

我们看到,重复调用list.append的两个循环花了最多的时间。


pprofile

根据作者说明,pprofile是一个“线程测量和统计的纯python分析器”。

它受到line_profiler的启发,修复了很多缺点,但是由于它完全用Python编写,所以它也可以与PyPy成功使用。与cProfile相比,使用CPython时的分析时间要多28倍,而使用PyPy时,分析时间要多10倍,而且细节水平更加细化。

我们也支持PyPy!除此之外,它支持剖析线程,这在各种情况下可能会很方便。

要使用它,您需要先通过pip添加它:pip install pprofile(CPython2)/ pypy -m pip install pprofile(PyPy),然后调用它:

输出与我们以前看到的不同,我们得到如下结果:

我们现在可以更详细地看到一切。让我们来看看输出。您可以获得脚本的整个输出,并且在每行之前,您可以看到对其进行的调用次数,运行时间(秒),每次调用的时间和全局时间的百分比,pprofile为我们的输出添加了额外的行(如第44和50行,以(call)开头)与累积指标。

再次,我们看到,重复调用list.append的两个循环花了我们脚本中最多的时间。


vprof

vprof是一个Python分析器,为各种Python程序特性(如运行时间和内存使用)提供丰富的交互式可视化。它是一个基于Node.JS的图形化的显示在网页中的结果。

使用它,您可以看到与Python脚本相关的以下一个或全部:

    1、CPU使用图

    2、代码分析

    3、内存图

    4、代码热图

要使用它,您需要先通过pip添加它:pip install vprof(CPython2)/ pypy -m pip install vprof(PyPy),然后调用它:


在每种情况下,您将看到代码散点图的以下内容

以及代码分析的以下内容。

结果以图形方式看到,我们可以悬停鼠标或单击每行以获取更多信息。再次,我们看到,重复调用list.append的两个循环花了我们脚本中最多的时间。


英文原文:https://pythonfiles.wordpress.com/2017/06/01/hunting-performance-in-python-code-part-3/ 


文章来源:Python程序员

《Spark大数据平台应用实战》郭俊(Jason)老师新课开课了,本周可继续报名,本课程将会结合精典案例讲解Spark Job的整个生命周期。学习它并掌握它,是大数据风口下IT人的必备技能。点击下方二维码报名课程



登录查看更多
0

相关内容

中央处理器(CPU,Central Processing Unit),电子计算机的主要设备之一。其功能主要是解释计算机指令以及处理计算机软件中的数据。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
257+阅读 · 2020年6月10日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
57+阅读 · 2020年4月26日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
189+阅读 · 2020年3月12日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
18+阅读 · 2019年10月28日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Python奇淫技巧,5个数据可视化工具
机器学习算法与Python学习
7+阅读 · 2019年4月12日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
A Comprehensive Survey on Transfer Learning
Arxiv
117+阅读 · 2019年11月7日
Efficient and Effective $L_0$ Feature Selection
Arxiv
5+阅读 · 2018年8月7日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
3+阅读 · 2018年6月1日
Arxiv
3+阅读 · 2018年3月13日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关资讯
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
18+阅读 · 2019年10月28日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Python奇淫技巧,5个数据可视化工具
机器学习算法与Python学习
7+阅读 · 2019年4月12日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
相关论文
A Comprehensive Survey on Transfer Learning
Arxiv
117+阅读 · 2019年11月7日
Efficient and Effective $L_0$ Feature Selection
Arxiv
5+阅读 · 2018年8月7日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
3+阅读 · 2018年6月1日
Arxiv
3+阅读 · 2018年3月13日
Arxiv
4+阅读 · 2016年12月29日
Top
微信扫码咨询专知VIP会员