一行代碼搞定Python逐行內存消耗分析
很多情況下,我們需要對已經寫好的Python程序的內存消耗進行優化,但是一段代碼在運行過程中的內存消耗是動態變化的,這種時候就可以用到memory_profiler這個第三方庫,它可以幫助我們分析記錄Python腳本中,執行到每一行時,內存的消耗及波動變化情況。
memory_profiler的使用方法超級簡單,使用pip install memory_profiler完成安裝后,只需要從memory_profiler導入profile并作為要分析的目標函數的裝飾器即可,譬如下面這個例子:
demo.py
import numpy as np
from memory_profiler import profile
@profile
def demo():
a = np.random.rand(10000000)
b = np.random.rand(10000000)
a_ = a[a < b]
b_ = b[a < b]
del a, b
return a_, b_
if __name__ == '__main__':
demo()
接著在終端執行python demo.py,稍事等待后,就會看到打印出的分析結果報告(這里我是在jupyter lab里執行的終端命令):
其中Line #列記錄了分析的各行代碼具體行位置,Mem usage列記錄了當程序執行到該行時,當前進程占用內存的量,Increment記錄了當前行相比上一行內存消耗的變化量,Occurrences記錄了當前行的執行次數(循環、列表推導等代碼行會記作多次),Line Contents列則記錄了具體對應的行代碼。
通過這樣細致的內存分析結果,我們就能有的放矢地優化我們的代碼啦~