簡體   English   中英

解釋python memory_profiler的輸出

[英]Interpreting the output of python memory_profiler

請原諒我這個天真的問題。 我正在嘗試監視python代碼的內存使用情況,並且遇到了很有前途的memory_profiler程序包。 我對解釋@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()

通過“ python dummy.py”調用dummy.py將返回下表。

行#內存使用量增加行內容

 3      8.2 MiB      0.0 MiB   @profile
 4                             def my_func():
 5     15.8 MiB      7.6 MiB       a = [1] * (10 ** 6)
 6    168.4 MiB    152.6 MiB       b = [2] * (2 * 10 ** 7)
 7     15.8 MiB   -152.6 MiB       del b
 8     15.8 MiB      0.0 MiB       return a

我的問題是表格第一行中的8.2 MiB對應什么。 我的猜測是這是python解釋器本身的初始內存使用情況; 但我不確定。 如果是這樣,是否有辦法從腳本的內存使用量中自動減去此基准使用量?

非常感謝您的時間和考慮!

努申

行之間的內存差異在第二列中給出,或者您可以編寫一個小腳本來處理輸出。

根據文檔

第一列表示已分析的代碼的行號,第二列(“內存使用情況”)執行該行后Python解釋器的內存使用情況。 第三列(增量)代表當前行相對於最后一行的內存差異。

因此,8.2 MiB是執行第一行后的內存使用量。 其中包括啟動Python,加載腳本及其所有導入(包括memory_profiler本身)所需的內存,等等。

似乎沒有任何記錄的選項可以將其從每個條目中刪除。 但是對結果進行后處理並不難。

另外,您真的需要這樣做嗎? 第三列顯示了每行之后已使用了多少額外的內存,而這或者跨行范圍的總和似乎比每行的第二列和開頭之間的差異更有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM