热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python统计行号_工具推荐|我是如何使用Python脚本分析CPU使用情况的?

传智点击蓝字关注我们↑↑↑↑在这篇文章中,我将讨论一个工具,用以分析Python中CPU使用情况。CPU分析是通过分析CPU执行代码的方式来测量代码的性
3bacb4535692d32d7dc210d3c052815b.png传智点击蓝字关注我们↑↑↑↑

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

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

    1、cProfile
    2、line_profiler
    3、pprofile
    4、vprof

测量CPU使用率


使用与内存分析中使用的相同脚本,具体如下:

a480f3111071c11c86cb07f8fdae6fdf.png

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

c8a8f035bbb553328df3b44e15f1df1d.png

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

00246c7429bf379b02469ec88ea97a74.png

cProfile


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


CPython2的用法很简单:

59ecee87fc64559c6079bdbf4968d860.png

如果您使用PyPy2:

8bec734fc3a628de0f2321f7e63f29d9.png

其输出如下:

341a24f0be6dfa2629d9dd49e2be0206.png

即使使用这个文本输出,很容易看到我们的脚本多次调用了list.append方法。如果我们使用gprof2dot,我们可以以图形的方式看到cProfile输出。要使用它,我们必须首先安装graphviz,之后是一些依赖包,最后在Ubuntu上使用如下命令:

b983dd5f8c1313dfc52d1611437ac607.png

再次运行脚本:

477fb89b435b68976fb16f0c1cb30e0e.png

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

6b345af35fcb5633fa66427fe4ac3eca.png

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

    1、第一行:Python文件名,行号和方法名称
   2、第二行:代码块占用全部时间的百分比
   3、第三行:括号中,方法本身占全部时间的百分比
   4、第四行:调用函数的次数

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


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

2a73bf7e1d06f6c0175d246d71181faf.png

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

f848e2e4b6a273818a8feb25ee531005.png

还有PyPy2:

cb706aa65cd5c7513430ae8035345f98.png

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

a4af3a640798d2d056e8c7a76840bce3.png

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

473829731decb69584a0de3ceba64b1a.png

line_profiler


此分析器在行级提供关于工作负载的信息。它使用Cython在C中实现,并将其与cProfile进行比较时发现其具有较小的开销。与cProfile相比,它具有一样的开销,不过却要花费12倍的时间来获取配置文件。

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

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

c6b42bb9725b3db237522e4f35edb2e6.png

你将得到如下输出:

5644bd2ec408b9bea3675ac8d0209bad.png

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

f2a7b95dee2fd00a2c80e6b6881e0b99.png

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

d99fca80835dd88930c1eb3149c729fb.png

我们现在可以更详细地看到一切。让我们来看看输出。您可以获得脚本的整个输出,并且在每行之前,您可以看到对其进行的调用次数,运行时间(秒),每次调用的时间和全局时间的百分比,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上,显示代码散热图(第一个调用如下)和代码分析(下面的第二个调用):

209770563b0a5ddf9316088e3ae6c8e5.png

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

98c138e506b7c01ec355dd800f5153df.png

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

275fb9962425783ee08b86430d6dbb3e.png

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

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

来源:https://pythonfiles.wordpress.com/2017/06/01/hunting-performance-in-python-code-part-3/  

译者:buhaoxuesheng                                                                         

6d77b9babfb2f432ecfb2ac8475adc29.gif

(点击图片可查看)

1f07ab5ca015966aef3b54405012cc49.png

a4c893ab9aad8c03384fdf134ba081ed.png

85202e7b4914cb40bf4ecd2cc640dbee.png

-END-

fe15a44239ae7b4405ab012593948815.png

6feb46ec7d8cde004157e5373d7dc5ea.png




推荐阅读
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
author-avatar
济南谷幽兰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有