0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python脚本使用时CPU使用情况检测过程详解

马哥Linux运维 2017-11-30 15:42 次阅读

在这篇文章中,我将讨论一个工具,用以分析PythonCPU使用情况。CPU分析是通过分析CPU执行代码的方式来测量代码的性能,以此找到代码中的不妥之处,然后处理它们。接下来我们将看看如何跟踪Python脚本使用时CPU使用情况,重点关注以下几个方面:1、cProfile2、line_profiler3、pprofile4、vprof

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

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

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

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

如果您使用PyPy2:

其输出如下:

即使使用这个文本输出,很容易看到我们的脚本多次调用了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%)中。作为一个简单的脚本,我们只需要重写我们的脚本,具体的如下所示:

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

还有PyPy2:

我们通过使用PyPy2的CPython2和3.1X获得了不错的效果,下面是cProfile的调用流程图:

您还可以以编程方式使用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的两个循环花了我们脚本中最多的时间。

vprofvprof是一个Python分析器,为各种Python程序特性(如运行时间和内存使用)提供丰富的交互式可视化。它是一个基于Node.JS的图形化的显示在网页中的结果。使用它,您可以看到与Python脚本相关的以下一个或全部:1、CPU使用图2、代码分析3、内存图4、代码热图要使用它,您需要先通过pip添加它:pip install vprof(CPython2)/ pypy -m pip install vprof(PyPy),然后调用它:在CPython2上,显示代码散热图(第一个调用如下)和代码分析(下面的第二个调用):

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

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

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


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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10412

    浏览量

    206466
  • python
    +关注

    关注

    51

    文章

    4667

    浏览量

    83441

原文标题:Python脚本分析CPU使用情况

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    rtthread编译后如何查看堆栈空间使用情况

    rtthread编译后如何查看堆栈空间使用情况,现在只能在编译完成后看到总大小,有没有办法能看到详细的使用情况。 由于RAM只有128K,除去内存池32k,想看看剩余的RAM在哪用了
    发表于 03-05 07:58

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?以及负载情况? 图片是运行完可以看RAM使用情况,是否可以运行中实时查看?是不是cubemonito
    发表于 03-12 07:56

    树莓派能不能加个可以根据CPU使用情况变风速的风扇?

    树莓派能不能加个可以根据CPU使用情况变风速的风扇?怎么加?
    发表于 12-17 21:14

    linux的系统内存使用情况查看

    通过free命令可以查看系统内存使用情况
    发表于 07-15 06:43

    如何查看RAM使用情况

    嗨, 我正在使用STM32L053 Nucleo,我已经为它运行了一些代码,我希望做一个RAM估计来查看当前固件的RAM使用情况。如何查看RAM使用情况? 问候#记忆
    发表于 08-05 10:08

    Android应用的内存使用情况检查方法

    如何检查 Android 应用的内存使用情况
    发表于 03-30 13:36

    ucosiii堆栈使用情况检测使用率100%?

    用OSTaskStkChk函数检测堆栈的使用情况,发现有两个任务使用情况为100%,堆栈设置为1024,增大堆栈到2048,依然使用率100%,该任务代码很短,一直运行,虽然使用率100%,但是程序正常运行并未崩溃,请问这是由于
    发表于 04-20 22:56

    电池使用情况统计信息

    电池使用情况信息根据电池使用情况统计信息和电源配置文件中的值计算得出。电池使用情况统计信息框架可通过跟踪设备组件在不同状态下维持的时间来自动确定电池使用情况统计信息。当组件(WLAN
    发表于 12-31 07:01

    如何知道CPU利用率和内存使用情况

    我在 MIMXRT1062 板上工作,我使用了“EVK-MIMXRT1060-guix_washing_machine”示例。我想要 CPU 利用率和内存使用情况。请给我有关它的信息,我也想知道它是如何计算的。
    发表于 03-31 06:21

    如何检查imx6中的GPU使用情况

    。 目前我正在使用 gmem_info 脚本来测试 GPU 使用情况并低于 o/p。 gmem_info Pid Total Reserved Contiguous Virtual Nonpaged
    发表于 05-22 07:04

    SoC如何查看内存使用情况

    查看系统内存: free -h 查看ION内存 NPU内存使用情况: cat /sys/kernel/debug/ion/bm_npu_heap_dump/summary | head -2VPU
    发表于 09-19 07:23

    主流GPS芯片使用情况

    主流GPS芯片使用情况
    发表于 11-27 14:34 13次下载

    在Linux系统下使用top命令查看CPU使用情况

    在Linux系统下,使用top命令查看CPU使用情况
    发表于 07-10 11:46 3913次阅读
    在Linux系统下使用top命令查看<b class='flag-5'>CPU</b><b class='flag-5'>使用情况</b>

    单片机整体的CPU使用情况详细介绍

    打开电脑的任务管理器,看着跳动的 CPU 使用率,发现很舒服。每一个线程占用了多少 CPU 清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了。今天这篇笔记不讲每个任务(或线程)CPU使用情
    发表于 11-25 15:58 12次下载
    单片机整体的<b class='flag-5'>CPU</b><b class='flag-5'>使用情况</b>详细介绍

    LPC86x ADC使用情况

    电子发烧友网站提供《LPC86x ADC使用情况.pdf》资料免费下载
    发表于 08-16 10:42 0次下载
    LPC86x ADC<b class='flag-5'>使用情况</b>