前幾天一直在尋找能夠輸出python函數(shù)運(yùn)行時(shí)最大內(nèi)存消耗的方式,看了一堆的博客和知乎,也嘗試了很多方法,最后選擇使用memory_profiler中的mprof功能來(lái)進(jìn)行測(cè)量的,它的原理是在代碼運(yùn)行過(guò)程中每0.1S統(tǒng)計(jì)一次內(nèi)存,并生成統(tǒng)計(jì)圖。
具體的使用方式如下:
首先安裝memory_profiler和psutil(psutil主要用于提高memory_profile的性能,建議安裝)(可使用pip直接安裝)
pip install memory_profiler pip install psutil
具體運(yùn)行方式為如下:(在待檢測(cè)代碼所在目錄中打開命令行運(yùn)行如下代碼)
mprof run test.py
結(jié)果會(huì)生成一個(gè).dat文件,如”mprofile_20160716170529.dat”,里面記錄了內(nèi)存隨時(shí)間的變化
mprof plot
使用該命令以圖片的形式展示出來(lái)
如果在運(yùn)行的時(shí)候出現(xiàn)如下的gbk解碼錯(cuò)誤,解決方案是首先進(jìn)入 memory_profiler.py文件中,找到第1131行,
把with open(filename) as f: 更改成 with open(filename, encoding='utf-8') as f:!?。?/p>
UnicodeDecodeError: ‘gbk' codec can't decode byte 0xad in position 337: illegal multibyte sequence


值得注意的是,盡管網(wǎng)上大部分都說(shuō)在待檢測(cè)的函數(shù)之前加上@profile修飾器,但是不知道為何我在anaconda python3.6的環(huán)境里始終加不上這個(gè)修飾器,強(qiáng)行加上就報(bào)錯(cuò),沒加上也沒問(wèn)題。
新聞熱點(diǎn)
疑難解答
圖片精選