对于软件公司来说,其应用程序的性能对于公司的成功至关重要。当一个应用程序快速执行代码时,客户会认为它是一个节省时间的工具。另一方面,当代码进入不必要的循环,调用不相干的函数,或以其他方式绊倒自己时,他们的反应就非常不同。他们可能会发现应用程序很慢或没有反应,并得出结论,使用它是在浪费时间。如果不加控制,这将导致用户不满,企业声誉受损,并造成数百万美元的收入损失。对于任何现实世界的使用, Python 剖析工具 都是必要的,这也是为什么软件公司花费数百万美元购买好的 Python 剖析工具教程。
Python 剖析工具是做什么的?
代码剖析工具允许你通过计算方法运行所需的时间以及它们使用的CPU和内存量来评估代码的性能。Datadog代码剖析工具允许你在任何环境下对代码进行剖析,包括生产环境,而不影响你的应用程序的性能。
为什么要使用Python剖析?
下面是一个好的Python剖析器的一些好处。
- 一个好的Python剖析器可以减少软件开发周期的数量,使其更加敏捷。
- 此外,它可以保持应用程序的稳定性,使其在不同的情况下都能可靠地运行。
- 此外,好的Python剖析器还能改善整个最终用户的体验。它们允许开发人员实时修复异常情况,从而减少开发人员的整体努力,减少开发时间。
此外,你可以使用Python剖析工具检测高资源消耗的方法并优化Python代码的应用性能。此外,你可以看到有多少CPU和内存被使用,有多少时间被花在锁、I/O和垃圾收集上,直接到代码行。因此,通过优化你最慢的和资源密集型的代码行,这些工具还可以帮助你减少延迟,改善最终用户的体验,并节省云提供商的成本。
此外,剖析甚至可以通过识别生产代码中的问题来减少MTTR,而这些问题是其他工具所看不到的,并且很难在其他环境中复制。探索各种剖析类型(CPU、内存、锁、I/O)以找到代码问题的来源也是一种选择。
在Python中进行代码剖析时,你应该使用哪个IDE?
PyScripter 始终是开发人员在 Python 中进行编码或剖析时的首选。
PyScripter 是一个轻量级的 Python IDE,具有你所期望的现代 Python IDE 的所有功能。这包括一个Python解释器,这可能非常有用。此外,这个解释器可以让用户运行Python程序,而不必保存它们,它还提供代码完成和调用提示。PyScripter还允许用户查看整个命令历史。
此外,Brace高亮显示、代码折叠、代码补全和输入时的语法检查只是PyScripter的少数功能。
这个最好的Python集成开发环境还允许你导入现有的目录和多个运行配置,作为一个项目经理。此外,集成的单元测试通过允许自动生成测试来提高生产力。这个软件的单元测试GUI非常复杂。此外,这在Python剖析时也很有用。
最重要的是,这个神奇的IDE允许与Python工具进行简单而快速的集成。因此,开发者会发现使用内置或额外的Python剖析工具很方便。你可以在 PyScripter 的 官方文档中了解更多 信息。
如何使用 cProfile 库?
cProfile 库是 Python 标准库中的一个内置 Python 模块。它被用作一个完整的全程序分析剖析器,由于其简单和方便,许多软件开发者喜欢它。如果使用得当,cProfile可以跟踪程序中的每一个函数,并生成一个列表,列出哪些函数被最频繁地调用,还可以记录调用的平均时间。
cProfile有三个很大的优点。
- 由于cProfile默认与Python标准库一起提供,所以在Python安装后就可以使用。
- 此外,cProfile还对函数调用行为的许多不同的统计数据进行了剖析。cProfile将每个函数调用所花费的时间和函数调用中的函数所花费的时间分开,以帮助你确定程序中哪个函数运行缓慢。
- 你可以自由约束cProfile。通过cProfile,开发者可以切换是对整个程序的运行进行采样,还是对某个选定的函数运行时进行采样。最好是关注那个函数在做什么,它调用了什么。
由于cProfile是一个内置的Python库,不需要进一步安装。
为了看一个基本的例子,让我们对一个只接受一个参数的函数进行剖析。
import cProfile
import re
cProfile.run('re.compile("foo|bar")')
此外,用户甚至可以选择通过给run()函数指定一个文件名作为第二个参数,将结果保存到文件中,而不是在剖析运行结束时打印输出。
import cProfile
import re
cProfile.run('re.compile("foo|bar")', 'data')
还有哪些工具可以用于剖析 Python 代码?
许多函数和工具都可以用于 Python 剖析;然而,只有两个秒表函数默认包含在 Python 标准库中。perf_counter 函数使用操作系统的高分辨率定时器生成一个任意的时间戳。为了找到时间差,我们只需调用time.perf_counter两次,一次在一个动作之前,一次在一个动作之后。
Python时间库模块中的Timeit模块试图在Python代码上模拟真实世界的基准测试。timeit.timeit函数获取一个代码片段,并多次运行(默认为100万次)以计算出所需时间。
另一个 Python 剖析工具是 FunctionTrace。就功能而言,它与 cProfile 类似。也就是说,你给它一个你想剖析的脚本的名字,它就会生成一个详细的函数调用和内存使用时间的图表,而不需要在代码中添加仪表。此外,FunctionTrace还可以处理多线程/多进程应用程序,而不需要你做任何额外的努力。
Pyinstrument是一个Python剖析库,其工作原理与cProfile类似,它可以跟踪你的程序,并生成关于占用时间最多的代码的报告。我们建议查看这篇文章以了解更多关于 内置的Python剖析工具。
什么是Snakeviz库?
另一个标准库模块,pstats,是将cProfile跟踪的数据可视化的最常见方式。另一方面,pstats生成的纯文本报告缺乏剖析统计所需的数据可视化。
Snakeviz从cProfile中获取数据,并将其转化为易于阅读的、交互式的HTML图形。有两种类型的图:"冰柱 "和 "太阳花",两者都显示了你的程序花了大部分时间,一目了然。图中的每一段都代表一个函数的调用时间。只需点击一个段来放大一个函数,你就能看到它下面的堆栈里的所有东西都需要多少时间。
此外,Snakeviz还为跟踪数据创建了一个可搜索和可排序的HTML表格视图,类似于pstats创建的跟踪数据,但更具互动性。此外,即使你不使用图表,跟踪的表格视图也是理解cProfile数据本身的一个强大的方式。
要安装最新的snakeviz,只需使用下面的pip命令。
pip install snakeviz
你对Python剖析工具有足够的了解吗?
每种编程语言都有两类速度:开发速度和执行速度。Python总是把编写速度放在优先于运行速度的位置。此外,即使Python代码的速度几乎总是足够快,但并不总是如此。在这些情况下,你需要弄清楚它在哪里以及为什么会滞后,并采取行动。
幸运的是,Python带有几个软件包,可以帮助你对你的应用程序进行剖析并找出瓶颈。我们在这篇文章中介绍了其中的几个,让你对Python剖析有一个大致的了解。如果你想了解更多,请查看这篇关于 在机器学习代码中添加剖析工具的文章 。