Python SnakeViz 库2024年8月29日 | 阅读 8 分钟 性能分析是一种重要的分析形式,我们可以利用它来分析代码的时间或空间复杂度。Python 等编程语言提供了各种库来满足性能分析的需求。一些用于分析时间复杂度的性能分析库的例子包括 cProfile、profile、line_profiler 等。一些用于分析空间复杂度的性能分析库的例子包括 memory_profiler、memprof、guppy/hpy 等。由 cProfile 等性能分析库生成的输出通常是带有多个行的日志文件,解释不同函数调用的利用时间。如果函数非常深且有许多代码行,那么分析此类日志文件可能会很乏味。 数据可视化是一个表示大量数据的过程。这些数据包含人眼可以捕捉到的不同模式,使我们能够更好地理解数据。Python 有一个名为 SnakeViz 的库,它可以接受 cProfile 库生成的性能分析文件并生成可视化。 了解 Python SnakeViz 库SnakeViz 库是 Python 编程语言中 cProfile 模块输出的基于浏览器的图形查看器。它是利用标准库 pstats 模块的替代方案。SnakeViz 库最初受到 RunSnakeRun 的启发。该库可以在 Python 2.7 和 Python 3 上运行。SnakeViz 库仍然可能在 Python 2.6 上运行;但是,现在 Tornado 不再支持 Python 2.6,因此官方支持已停止。 SnakeViz 库包含两种可视化样式,用于可视化性能分析结果。
冰柱图利用矩形的宽度来表示函数所花费的时间,而旭日图则利用弧的角度来表示函数所花费的时间。调用其他函数的函数将有一个特殊的子项,表示该函数在不包括其调用的其他函数的情况下所花费的时间。只有调用其他函数的函数才会有这样的子项。 如何安装 Python SnakeViz 库?要安装 Python 库,我们需要 'pip',这是一个用于管理从受信任的公共存储库安装模块所需的包的框架。一旦我们有了 'pip',我们就可以使用 Windows 命令提示符 (CMD) 或终端中的命令来安装 snakeviz 库,如下所示。 语法 现在我们将通过不同的示例来理解 SnakeViz 库的用法。 基于 SnakeViz 的一些示例现在让我们考虑一些基于 SnakeViz 库的示例。 示例 1:命令行/Shell 中的 SnakeViz以下示例演示了 SnakeViz 库的用法。在此示例中,我们将调用 mainFunction(),它将调用三个函数并逐个打印所有函数返回的结果。所有三个函数都类似,每个函数都生成 1-150 之间的 150000 个随机数并返回该数字的平均值。唯一不同的是每个函数所花费的时间。我们将手动引入一个计时器,该计时器将暂停每个函数不同的时间。我们将借助 cProfile 库来分析此脚本,然后利用 SnakeViz 可视化输出。 文件:exampleOne.py 输出 # we will utilize the following command to profile exampleOne.py $ python -m cProfile -o exampleOne.prof exampleOne.py 75.36921333333333 75.40457333333333 75.51178 # we can then call the below command to launch SnakeViz # visualization in the browser $ snakeviz exampleOne.prof # Once we execute the above command, the SnakeViz library will launch # visualization on a browser 说明 在上面的代码片段中,我们导入了所需的模块。然后,我们定义了 verySlowRandomGenerator、slowRandomGenerator 和 fastRandomGenerator 等函数来生成类似的输出。在这些函数中,我们还包含了 time 模块的 sleep() 方法,其值不同,这有助于我们区分每个函数所花费的时间。然后,我们定义了 mainFunction() 函数,我们在其中打印了上述定义函数的返回值。最后,我们调用了 mainFunction() 函数。 在上面的录屏中,我们可以看到 SnakeViz 库默认生成了两个图表,我们可以从下拉列表中更改图表。性能分析的所有单独行都将在下面的可视化表中显示。
现在我们将了解可视化中的不同组件,它们可以帮助我们更好地理解可视化。
示例 2:Jupyter Notebook 中的 SnakeViz我们也可以轻松地在 Jupyter notebook 中使用 SnakeViz 库。首先,我们需要将 SnakeViz 库作为扩展加载到 notebook 中,然后我们可以调用 snakeviz 作为行或单元格魔术命令。 让我们考虑以下语法将 SnakeViz 库加载为扩展。 语法 现在让我们使用与上一个示例相同的代码;但是,我们将使用 %snakeviz 行命令来调用 mainFunction(),以生成其 SnakeViz 可视化。它将在 notebook 中生成可视化。 文件:exampleTwo.py 输出 75.41503333333333 75.59046666666667 75.37472 *** Profile stats marshalled to file '/tmp/tmps5uyxuux'. Embedding SnakeViz in this document... # this will return the SnakeViz visualization 说明 在上面的代码片段中,我们使用了前一个示例的代码。然后,我们使用了 %snakeviz mainFunction() 语句来调用函数并为其生成 SnakeViz 可视化。 示例 3现在让我们考虑以下示例,其中我们将使用相同的代码再次生成 SnakeViz 可视化;但是,这次我们将使用 %%snakeviz 单元格魔术命令来解释其用法。 文件:exampleThree.py 输出 75.67562666666667 75.38932 75.47096666666667 *** Profile stats marshalled to file '/tmp/tmphty5rhzv'. Embedding SnakeViz in this document... # this will return the SnakeViz visualization 说明 在上面的代码片段中,我们使用了 %%snakeviz 单元格魔术命令,并重复了前一个示例的代码片段。 下一主题物化视图与视图的区别 |
简介:在本文中,我们将讨论 Python linter。每天我们都被各种美好的规则包围着,这些规则让生活轻松很多。例如,司机应该遵守交通规则。因此,每位司机都知道如何在道路上行事以及必须遵守哪些规定……
阅读 6 分钟
飞船泰坦尼克号问题是基本泰坦尼克号生存问题的进阶版本,机器学习爱好者必须面对一次,并预测一个人的生存几率。飞船泰坦尼克号项目问题说明 在这个项目中,一艘飞船载着许多人进行太空旅行。……
14 分钟阅读
以下教程基于数据分析;我们将详细讨论方差分析(ANOVA),以及在Python编程语言中执行该过程。ANOVA通常用于心理学研究。在以下教程中,我们将理解如何……
阅读 13 分钟
?作为最受欢迎和适应性最强的编程语言之一,Python 可用于创建各种应用程序。Python 使程序员能够为 Web 应用程序创建服务器端或后端代码。还包括了几个框架和包。考虑到这一点,我们将尝试...
阅读 3 分钟
re.sub() 是 Python re(正则表达式)模块中的一个函数。它用于将字符串中所有出现的模式替换为新字符串。该函数接受三个参数:pattern:要在输入字符串中搜索的正则表达式模式。repl:...
阅读 2 分钟
在本教程中,我们将编写用于股票跨度问题的Python程序。这是一个在技术面试中经常出现的非常流行的编程问题。股票跨度问题是一个金融挑战,涉及分析一系列N个每日报价...
7 分钟阅读
Numpy 函数 Flatten() 和 Ravel() 之间的区别 有两种方法可以将 Ndarray 转换为一维数组 flatten() 和 Ravel() import numpy as nmp P = nmp.array( [ (1,8,4,5),(4,3,5,1) ] ) #输出: print( P.flatten() ) # [ 1,8,4,5,4,3,5,1 ] print ( P.ravel() ) # [ 1,8,4,5,4,3,5,1 ]...
阅读 2 分钟
简介 基于比较的排序算法快速排序使用分治策略。它根据它们是小于还是大于作为枢轴的元素,将剩余的成员分成 2 个子数组(或子列表),该枢轴是从……中选择的“枢轴”元素。
阅读 4 分钟
?现有的Python包总数超过20万个(这个数字仅包括存储在PyPI(官方Python包索引)上的包)。Python包提供了一种用户友好且有效的解决方案,可以解决各个领域的挑战性问题,包括科学计算、数据可视化,...
阅读 6 分钟
在接下来的教程中,我们将学习用于模式搜索的有限自动机算法,并讨论在 Python 编程语言中实现该算法的方法。但在我们开始之前,让我们先了解一下有限自动机的含义。有限自动机的简介 有限...
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India