使用memory_profiler監測python程式碼執行時記憶體消耗
前幾天一直在尋找能夠輸出python函式執行時最大記憶體消耗的方式,看了一堆的部落格和知乎,也嘗試了很多方法,最後選擇使用memory_profiler中的mprof功能來進行測量的,它的原理是在程式碼執行過程中每0.1S統計一次記憶體,並生成統計圖。
具體的使用方式如下:
首先安裝memory_profiler和psutil(psutil主要用於提高memory_profile的效能,建議安裝)(可使用pip直接安裝)
pip install memory_profiler
pip install psutil
具體執行方式為如下:(在待檢測程式碼所在目錄中開啟命令列執行如下程式碼)
mprof run test.py
結果會生成一個.dat檔案,如”mprofile_20160716170529.dat”,裡面記錄了記憶體隨時間的變化
mprof plot
使用該命令以圖片的形式展示出來
如果在執行的時候出現如下的gbk解碼錯誤,解決方案是首先進入 memory_profiler.py檔案中,找到第1131行,
把with open(filename) as f: 更改成 with open(filename, encoding=’utf-8’) as f:!!!
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xad in position 337: illegal multibyte sequence
值得注意的是,儘管網上大部分都說在待檢測的函式之前加上@profile修飾器,但是不知道為何我在anaconda python3.6的環境裡始終加不上這個修飾器,強行加上就報錯,沒加上也沒問題。