Python 記憶體監測 memory_profiler

2022/09/08 Python

前言

今日要介紹在 Python 語言中非常好用的記憶體監測套件 memory_profiler。我們可以透過它來分析執行每行程式碼的記憶體使用情況。

安裝 memory_profiler

memory_profiler 是用 Python 編寫的,可以用 pip 安裝。

pip install memory_profiler

使用方法

建立一個 py 文件,並在函式開頭定義 @profile

# memory_profiler_test.py
from memory_profiler import profile

@profile
def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a

if __name__ == '__main__':
    my_func()

接著在終端機輸入以下指令執行文件。

python memory_profiler_test.py

輸出結果:

Line #    Mem usage    Increment  Occurrences   Line Contents
=============================================================
     4     40.2 MiB     40.2 MiB           1   @profile
     5                                         def my_func():
     6     47.8 MiB      7.7 MiB           1       a = [1] * (10 ** 6)
     7    200.5 MiB    152.6 MiB           1       b = [2] * (2 * 10 ** 7)
     8     47.9 MiB   -152.6 MiB           1       del b
     9     47.9 MiB      0.0 MiB           1       return a

若不想在終端機中印出結果,可以在原本程式中增加引數,以下範例中修改了浮點數顯示的精度,以及將評估結果輸出到指定路徑中。

@profile(precision=4,stream=open('memory_profiler.log','w+'))

同樣在執行一次指令可以發現,在該目錄資料夾下會多出 memory_profiler.log 文件。裡面記載了程式碼逐行的記憶體使用量。

輸出圖片分析

該套件也能將分析的結果輸出成一個 dat 文件,並透過 mprof 指令,。

指令說明:

  • mprof run memory_profiler_test.py
    • 分析結果會保存到一個 .dat 格式文件中
  • mprof plot
    • 把結果以圖片到方式顯示出來 (在該專案目錄下執行此命令,會自動找出 .dat 文件)
  • mprof clean
    • 清空所有 .dat 文件
mprof run memory_profiler_test.py
mprof plot
mprof clean

後記

若要計算程式執行時間可以試試 line_profiler。它會告訴你每一行花了多少時間,而 memory_profiler 告訴你每一行分配了多少記憶體。

Reference

鼓勵持續創作,支持化讚為賞!透過下方的 Like 拍手👏,讓創作者獲得額外收入~
版主10在2020年首次開設YouTube頻道,嘗試拍攝程式教學。想要了解更多的朋友歡迎關注我的頻道,您的訂閱就是最大的支持~如果想學其他什麼內容也歡迎許願XD
https://www.youtube.com/channel/UCSNPCGvMYEV-yIXAVt3FA5A

Search

    Table of Contents