当前位置: 移动技术网 > IT编程>脚本编程>Python > 如何使用Python脚本分析CPU使用情况的?

如何使用Python脚本分析CPU使用情况的?

2019年07月22日  | 移动技术网IT编程  | 我要评论

用以分析python中cpu使用情况。cpu分析是通过分析cpu执行代码的方式来测量代码的性能,以此找到代码中的不妥之处,然后处理它们。

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

1、cprofile

2、line_profiler

3、pprofile

4、vprof

测量cpu使用率

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

 

如何使用python脚本分析cpu使用情况的?

 

 

 

另外,请记住,在pypy2中,您需要使用与之配合的pip版本:

如何使用python脚本分析cpu使用情况的?

 

并且其他依赖项也将被安装:

如何使用python脚本分析cpu使用情况的?

 

cprofile

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

cpython2的用法很简单:

如何使用python脚本分析cpu使用情况的?

 

如果您使用pypy2:

如何使用python脚本分析cpu使用情况的?

 

其输出如下:

 

如何使用python脚本分析cpu使用情况的?

 

 

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

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

如何使用python脚本分析cpu使用情况的?

 

再次运行脚本:

如何使用python脚本分析cpu使用情况的?

 

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

 

如何使用python脚本分析cpu使用情况的?

 

 

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

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

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

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

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

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

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

 

如何使用python脚本分析cpu使用情况的?

 

 

如果我们使用cpython2测量我们脚本的时间,

如何使用python脚本分析cpu使用情况的?

 

还有pypy2:

如何使用python脚本分析cpu使用情况的?

 

我们通过使用pypy2的cpython2和3.1x获得了不错的效果,下面是cprofile的调用流程图:

 

如何使用python脚本分析cpu使用情况的?

 

 

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

 

如何使用python脚本分析cpu使用情况的?

 

 

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

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。然后调用它:

如何使用python脚本分析cpu使用情况的?

 

你将得到如下输出:

 

如何使用python脚本分析cpu使用情况的?

 

 

我们看到,重复调用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),然后调用它:

如何使用python脚本分析cpu使用情况的?

 

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

 

如何使用python脚本分析cpu使用情况的?

 

 

我们现在可以更详细地看到一切。让我们来看看输出。您可以获得脚本的整个输出,并且在每行之前,您可以看到对其进行的调用次数,运行时间(秒),每次调用的时间和全局时间的百分比,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),然后调用它:

在cpython2上,显示代码散热图(第一个调用如下)和代码分析(下面的第二个调用):

如何使用python脚本分析cpu使用情况的?

 

在pypy上,显示代码散热图(第一个调用如下)和代码分析(下面的第二个调用):

如何使用python脚本分析cpu使用情况的?

 

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

 

如何使用python脚本分析cpu使用情况的?

 

 

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

如何使用python脚本分析cpu使用情况的?

 

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网