memory_profiler
是一個用來測量 Python 程式記憶體使用情況的工具,它可以幫助開發者了解程式的記憶體消耗,特別是在執行長時間運行或處理大量數據的程式時非常有用。
有別於tracemalloc
模組,memory_profiler
能在每一行程式碼上顯示記憶體變化,但相對的就不適合埋在程式內長期監控用,因為很吃效能,比較適合分析大範圍的記憶體使用情況,比如檢測程式中哪些操作消耗了大量的記憶體。特別適合處理大數據集或進行大量數據處理的應用。
tracemalloc
模組文章
[Python]查看程式碼占用多少記憶體[Python]使用tracemalloc 模組來比較兩種不同方法所佔用的記憶體大小
memory_profiler
提供了詳細的函數層級的記憶體使用追蹤報告,並可用來檢查程式中哪些部分消耗較多的記憶體。
安裝
要使用 memory_profiler
,首先需要安裝它:
pip install memory-profiler
基本用法
memory_profiler
的使用方式主要有兩種:
- 使用
@profile
裝飾器來標記需要追蹤的函數。 - 使用
mprof
來進行更全面的記憶體分析。
使用 @profile
裝飾器
- 首先,必須將程式碼保存在檔案中,並加上
@profile
裝飾器來標記想要追蹤記憶體使用的函數。 - 然後使用
python -m memory_profiler your_script.py
執行該檔案。
@profile 程式範例:
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()
當你執行這段程式碼時,memory_profiler
會提供記憶體使用的詳細資訊,像是每一行程式碼執行時記憶體的變化。
執行指令:
python -m memory_profiler your_script.py

1. Line #(行號)
- 表示程式碼中的行號,即這一行程式碼在檔案中的位置。
2. Mem usage(記憶體使用)
- 程式在執行到這一行時,總的記憶體使用量(以 MiB 為單位,1 MiB ≈ 1.05 MB)。
- 這是實體記憶體的總使用量,包括所有變數、數據結構等佔用的記憶體。
3. Increment(增量)
- 這一行程式碼執行後,記憶體使用量相對於上一行的變化量。
- 如果增量為正,表示這一行程式碼增加了記憶體的使用;如果增量為負,表示記憶體被釋放(例如
del
語句釋放了內存)。 - 這是非常重要的一列,因為它能幫助你定位記憶體使用出現異常增長的地方。
4. Occurrences(次數)
- 表示該行程式碼執行的次數。這對於了解循環或多次調用函數的情況非常有用。
- 如果某一行被多次執行,記憶體使用可能會累積,通過這個欄位你可以知道這種累積是否來自於多次調用。
5. Line Contents(程式碼內容)
- 顯示實際的程式碼內容,即每行程式碼的具體內容。
使用 mprof
進行全面分析
除了 @profile
裝飾器外,你也可以使用 mprof
來追蹤整個程式的記憶體使用情況,並生成圖表。
- 首先啟動記憶體追蹤:
mprof run your_script.py
- 然後生成圖表:
mprof plot
首先啟動記憶體追蹤

生成圖表
這將會產生一個圖形,顯示隨著時間變化的記憶體使用情況

謝謝大家觀看,若喜歡的話,希望可以追蹤,點愛心給予鼓勵
若在Jupyter Notebook執行的話
- 安裝 memory_profiler: 如果你還沒有安裝
memory_profiler
,可以通過以下指令安裝它:pip install memory-profiler
- 啟用 memory_profiler 魔術命令: 在 Jupyter Notebook 中,使用
%load_ext
命令來加載memory_profiler
的魔術命令。%load_ext memory_profiler
- 使用 %mprun 魔術命令進行記憶體分析: 在你要進行記憶體分析的函數之前加上
%mprun
魔術命令,指定你要分析的函數。