Python性能分析
在Python中,性能分析是衡量程序不同部分性能的过程,用于检查和识别优化区域和瓶颈。我们有很多工具可以对Python代码进行性能分析,包括内置模块、库和IDE(集成开发环境)。Python代码的性能分析有多种类型,让我们逐一看看。
使用行性能分析
行性能分析是一种用于测量程序每一行代码执行时间的技术。它可以帮助我们识别哪些行代码占用更多执行时间,以及找出代码中的紧密循环或其他关键性能部分。在Python中,可以使用line_profiler工具进行行性能分析。
首先,我们需要使用下面的代码行在我们的Python环境中安装Line_profiler工具。
pip install line_profiler
输出
Collecting line_profilerNote: you may need to restart the kernel to use updated packages. Downloading line_profiler-4.0.3-cp39-cp39-win_amd64.whl (83 kB) ---------------------------------------- 83.6/83.6 kB 1.6 MB/s eta 0:00:00 Installing collected packages: line_profiler Successfully installed line_profiler-4.0.3
现在,要使用line_profiler工具检查给定Python代码的性能分析,语法如下。
import line_profiler line_profiler(python_code)
示例
在这个例子中,我们将使用line_profiler()工具检查每一行代码的执行时间。此模块将Python代码作为输入,并使用print_stats()函数返回时间作为输出。
from line_profiler import LineProfiler def add(a,b): out = a + b print("The sum of a and b:", out) out = LineProfiler(add(10,30)) out.print_stats()
输出
Using Function profiling
使用函数性能分析
函数性能分析是一种允许你测量程序中单个函数或方法执行时间的技术。这可以帮助我们识别哪些函数占用最多的执行时间,也有助于在更高层次上优化代码。Python中用于函数性能分析的一个内置模块是cProfile。
cProfile模块的run()函数计算用户定义函数的执行时间。
语法
以下是使用cProfile.run()的语法。
cProfile.run(function_name)
示例
在这个例子中,我们尝试将函数名以字符串格式传递给cProfile模块的run()函数,然后它返回所有执行统计信息。
import cProfile a = input("Enter the text to be displayed: ") def display(a): print(a) cProfile.run('display')
输出
Enter the text to be displayed: Welcome to Tutorialspoint.com 3 function calls in 0.000 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.000 0.000 <string>:1(<module>) 1 0.000 0.000 0.000 0.000 {built-in method builtins.exec} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
使用内存性能分析
内存性能分析是另一种技术,它可以帮助用户测量程序在执行期间使用的内存量。这可以帮助我们识别内存泄漏或其他影响代码性能的内存相关问题。
memory_profiler模块中有一个profile()函数,它可以执行内存使用量的测量。
如果我们第一次使用此模块,则需要使用以下代码在Python环境中安装它。
pip install memory_profiler
安装后将显示消息:Collecting memory_profiler
Downloading memory_profiler-0.61.0-py3-none-any.whl (31 kB) Requirement already satisfied: psutil in c:\users\niharikaa\anaconda3\lib\site-packages (from memory_profiler) (5.9.0) Installing collected packages: memory_profiler Successfully installed memory_profiler-0.61.0
语法
使用memory_profiler的语法如下。
python -m memory_profiler file_name mprof run file_name
示例
如果我们想获取已执行代码的内存性能分析统计信息,则必须创建一个Python文件,然后需要在命令提示符中通过传递Python文件以及memory_profiler来执行。
以下是保存在python_sample.py文件中的代码。
from memory_profiler import profile @profile def display(): a = "Welcome to the Tutorialspoint website" print(a) display()
我们需要在命令提示符中执行以下代码行才能获得内存统计信息。
mprof run python_sample.py
输出
mprof: Sampling memory every 0.1s running new process running as a Python program...