做用:memory_profiler是用來分析每行代碼的內存使用狀況python
使用方法一:函數
1.在函數前添加 @profilespa
2.運行方式: python -m memory_profiler memory_profiler_test.py 調試
此方法缺點:在調試 和 實際項目運行時 要 增刪 @profile 此裝飾器日誌
代碼以下:code
1 #coding:utf8 2 3 @profile 4 def test1(): 5 c=0 6 for item in xrange(100000): 7 c+=1 8 print c 9 10 if __name__=='__main__': 11 test1()
輸出結果:blog
rgc@rgc:~/baidu_eye/carrier/test$ python -m memory_profiler memory_profiler_test.py 100000 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: 內存佔用狀況ip
Increment: 執行該行代碼後新增的內存內存
使用方法二:
1.先導入: from memory_profiler import profile
2.函數前加裝飾器: @profile(precision=4,stream=open('memory_profiler.log','w+'))
參數含義:precision:精確到小數點後幾位
stream:此模塊分析結果保存到 'memory_profiler.log' 日誌文件。若是沒有此參數,分析結果會在控制檯輸出
運行方式:直接跑此腳本 python memory_profiler_test.py
此方法優勢:解決第一種方法的缺點,在 不須要 分析時,直接註釋掉此行
1 #coding:utf8 2 from memory_profiler import profile 3 4 @profile(precision=4,stream=open('memory_profiler.log','w+')) 5 # @profile 6 def test1(): 7 c=0 8 for item in xrange(100000): 9 c+=1 10 print c 11 12 if __name__=='__main__': 13 test1()
使用方法三:
腳本代碼和方法二同樣,可是 運行方式不一樣
mprof run memory_profiler_test.py : 分析結果會保存到一個 .dat格式文件中
mprof plot : 把結果以圖片到方式顯示出來(直接在本目錄下運行此命令便可,程序會自動找出.dat文件) (要安裝 pip install matplotlib
)
mprof clean : 清空全部 .dat文件