当前位置: 首页 > 科技观察

Python脚本分析CPU使用

时间:2023-03-12 02:22:22 科技观察

在这篇文章中,我将讨论一个工具来分析Python中的CPU使用情况。CPU分析通过分析CPU如何执行代码来衡量代码的性能,找出代码的问题并加以处理。接下来我们看看如何在使用Python脚本时跟踪CPU使用率,重点关注以下几个方面:1.cProfile2.line_profiler3.pprofile4.vprof测量CPU使用率对于本文,我将主要使用与内存相同的脚本在分析中使用,如下所示:另外,请记住,在PyPy2中,您需要使用适用于:的pip版本,并且还将安装其他依赖项:cProfile是讨论CPU分析时最常用的之一tools是cProfile,主要是因为它内置于CPython2和PyPy2中。这是一个确定性分析器,意味着在程序运行时收集一组统计数据,例如我们代码各个部分的执行次数或执行时间。此外,cProfile的系统开销低于其他内置分析器(配置文件)。CPython2的用法很简单:如果你使用PyPy2:它的输出如下:即使有这个文本输出,也很容易看出我们的脚本多次调用了list.append方法。如果我们使用gprof2dot,我们可以以图形方式看到cProfile输出。要使用它,我们必须先安装graphviz,然后安装一些依赖包,***在Ubuntu上使用以下命令:再次运行脚本:我们得到以下output.png文件:这使得查看所有内容变得更容易。让我们仔细看看它的输出。可以看到脚本中的函数调用如下:1.第一行:Python文件名、行号和方法名2.第二行:代码块占用总时间的百分比3.第三行行:括号中,方法本身占总时间的百分比4.第四行:函数被调用的次数。剩下的时间花在了Python中的list.append(22.33%)和range(11.51%)上。作为一个简单的脚本,我们只需要按如下方式重写我们的脚本:如果我们使用CPython2来测量我们脚本的时间,以及PyPy2:我们使用CPython2和3.1X使用PyPy2获得了很好的结果,下面是cProfile的调用流程图:你也可以通过编程方式使用cProfile,例如:这在某些情况下很有用,比如多进程性能测量line_profiler这个profiler提供关于行级工作负载的信息。它使用Cython在C中实现,与cProfile相比开销较小。可以在此处找到源代码,在此处可以找到PyPI页面。与cProfile相比,它具有相同的开销,但获取配置文件的时间要长12倍。要使用它,需要先通过pip添加:pipinstallpipinstallCythonipython==5.4.1line_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添加:pipinstallpprofile(CPython2)/pypy-mpipinstallpprofile(PyPy),然后调用它:输出和我们之前看到的不一样,我们得到如下结果:我们现在可以更详细地查看所有内容。让我们看看输出。您可以获得脚本的整个输出,并且在每一行之前您可以看到对其的调用次数、经过的时间(以秒为单位)、每次调用的时间和全局时间的百分比,pprofile在我们的输出中添加了额外的行(例如如第44和50行,以(call))开始,带有累积指标。同样,我们看到重复调用list.append的两个循环在我们的脚本中花费的时间最多。vprofvprof是一个Python分析器,它提供各种Python程序特征(例如运行时和内存使用情况)的丰富交互式可视化。它是基于Node.JS的网页结果图形显示。使用它,您可以看到以下与您的Python脚本相关的一项或全部:1.CPU使用率图2.代码分析3.内存图4.代码热图要使用它,您需要先通过pip添加它:pipinstallvprof(CPython2)/pypy-mpipinstallvprof(PyPy),然后调用它:在CPython2上,显示代码热图(下面第一次调用)和代码分析(下面第二次调用):在PyPy上,显示代码散点图(下面第一次调用)和代码分析(下面的第二次调用):在每种情况下,您将看到以下代码散点图和以下代码分析。结果以图形方式显示,我们可以将鼠标悬停或单击每一行以获取更多信息。同样,我们看到重复调用list.append的两个循环在我们的脚本中花费的时间最多。