Python日學壹技:效能分析
阿新 • • 發佈:2022-11-30
導讀
相信日常使用Python
作為生產力的讀者,一定會存在想要分析程式碼中每一行的執行時間與變數佔用記憶體大小的需求,本文主要分析兩個模組,用於分析每行程式碼的記憶體使用情況和執行時間情況。
記憶體使用
安裝
pip install memory-profiler
使用方法一
- 在需要分析的函式上,新增裝飾器@profile
@profile
def test1():
c=0
for item in xrange(100000):
c+=1
print (c)
- 使用下面的命令執行
python -m memory_profiler memory_profiler_test.py
使用方法二
from memory_profiler import profile
@profile(precision=4,stream=open('memory_profiler.log','w+'))
# @profile
def test1():
c=0
for item in xrange(100000):
c+=1
print c
# 直接執行即可
結果
Filename: memory_profiler_test.py Line # Mem usage Increment Line Contents ================================================ 5 21.492 MiB 21.492 MiB @profile 6 def test1(): 7 21.492 MiB 0.000 MiB c=0 8 21.492 MiB 0.000 MiB for item in xrange(100000): 9 21.492 MiB 0.000 MiB c+=1 10 21.492 MiB 0.000 MiB print c
- Mem usage: 記憶體佔用情況
- Increment: 執行該行程式碼後新增的記憶體
執行時間
安裝
pip install line-profiler
使用
- 在需要分析的函式上,新增裝飾器@profile
@profile
def slow_function(a, b, c):
...
- 執行
python -m line_profiler script_to_profile.py.lprof
結果
Pystone(1.1) time for 50000 passes = 2.48 This machine benchmarks at 20161.3 pystones/second Wrote profile results to pystone.py.lprof Timer unit: 1e-06 s File: pystone.py Function: Proc2 at line 149 Total time: 0.606656 s Line # Hits Time Per Hit % Time Line Contents ============================================================== 149 @profile 150 def Proc2(IntParIO): 151 50000 82003 1.6 13.5 IntLoc = IntParIO + 10 152 50000 63162 1.3 10.4 while 1: 153 50000 69065 1.4 11.4 if Char1Glob == 'A': 154 50000 66354 1.3 10.9 IntLoc = IntLoc - 1 155 50000 67263 1.3 11.1 IntParIO = IntLoc - IntGlob 156 50000 65494 1.3 10.8 EnumLoc = Ident1 157 50000 68001 1.4 11.2 if EnumLoc == Ident1: 158 50000 63739 1.3 10.5 break 159 50000 61575 1.2 10.1 return IntParIO
- 每列含義
> - Line #: The line number in the file.
> - Hits: The number of times that line was executed.
> - Time: The total amount of time spent executing the line in the timer's units. In the header information before the tables, you will see a line "Timer unit:" giving the conversion factor to seconds. It may be different on different systems.
> - Per Hit: The average amount of time spent executing the line once in the timer's units.
> - % Time: The percentage of time spent on that line relative to the total amount of recorded time spent in the function.
> - Line Contents: The actual source code. Note that this is always read from disk when the formatted results are viewed, *not* when the code was executed. If you have edited the file in the meantime, the lines will not match up, and the formatter may not even be able to locate the function for display.
歡迎Star -> 學習目錄
更多教程 -> 學習目錄
本文由mdnice多平臺釋出