欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python內(nèi)存監(jiān)控工具memory_profiler和guppy的用法詳解

 更新時(shí)間:2019年07月29日 10:22:11   作者:一江明澈的水  
這篇文章主要介紹了python內(nèi)存監(jiān)控工具memory_profiler和guppy的用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

python2.7在內(nèi)存管理上相比python3還是有些坑的,其釋放后的內(nèi)存仍然保留在python的內(nèi)存池中,不被系統(tǒng)所用。python循環(huán)引用的變量不會(huì)被回收,這會(huì)導(dǎo)致程序越運(yùn)行,占用的內(nèi)存越大。我在跑py-faster-rcnn的demo時(shí),基本上跑2000張圖像,16g內(nèi)存就要爆了。于是嘗試用python的內(nèi)存監(jiān)控工具來調(diào)試程序,找到不能膨脹的變量,然后del之,再手動(dòng)回收內(nèi)存gc.collec()

下面是我用的兩個(gè)內(nèi)存監(jiān)視工具,一個(gè)是按每行代碼查看內(nèi)存占用的工具memory_profiler,一個(gè)是查看占用內(nèi)存前十位變量的工具guppy。

1. memory_profiler

首先是安裝:

pip install -U memory_profiler

然后用profile修飾想要查看的函數(shù)名:如:

@profile
def my_func():
 a = [1] * (10 ** 6)
 b = [2] * (2 * 10 ** 7)
 del b
 return a

if __name__ == '__main__':
 my_func()

輸出結(jié)果:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

memory_profiler功能強(qiáng)大,更多功能可以看官網(wǎng)這里

2. guppy

首先安裝:

pip install guppy

然后import下

from guppy import hpy
hxx = hpy()
heap = hxx.heap()
byrcs = hxx.heap().byrcs;

在主程序下增加:

print(heap)

輸出示例:

Index Count %  Size % Cumulative % Kind (class / dict of class)
  0 10124 22 81944416 95 81944416 95 list
  1 16056 34 1325464 2 83269880 96 str
  2 9147 20 745616 1 84015496 97 tuple
  3 102 0 366480 0 84381976 98 dict of module
  4 287 1 313448 0 84695424 98 dict of type
  5 2426 5 310528 0 85005952 98 types.CodeType
  6 2364 5 283680 0 85289632 99 function
  7 287 1 256960 0 85546592 99 type
  8 169 0 192088 0 85738680 99 dict (no owner)
  9 123 0 142728 0 85881408 99 dict of class

可以看到第一個(gè)list占了95%的內(nèi)存,若print(heap)在主程序的循環(huán)中,可以查看每次循環(huán)后的變量?jī)?nèi)存占用情況。

輸入以下命令,查看這個(gè)占內(nèi)存最大的list中的數(shù)據(jù)類型:
byrcs[0].byid

最后測(cè)試后發(fā)現(xiàn),test.pyget_im_blob等函數(shù)占用內(nèi)存不斷增大,每檢測(cè)一副圖像,該函數(shù)增加6-10MB內(nèi)存開銷。但奇怪的是用guppy查看前十個(gè)變量,并沒有發(fā)現(xiàn)哪個(gè)變量有明顯的內(nèi)存增大跡象。于是猜測(cè)可能是每張圖像推理后,推理的結(jié)果bbox,label,img等數(shù)據(jù)保存在了內(nèi)存中,這樣方便所有圖像推理結(jié)束后,plt.show().于是修改程序,每張圖像推理后,plt.show()一下。用memory_profiler發(fā)現(xiàn)內(nèi)存不再繼續(xù)增大,interesting!其實(shí)把plt.show()改成plt.close()也可以防止內(nèi)存不斷增大。具體原因肯定是python 的內(nèi)存回收機(jī)制規(guī)則導(dǎo)致的。

總結(jié)

以上所述是小編給大家介紹的python內(nèi)存監(jiān)控工具memory_profiler和guppy的用法詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python中HMAC加密算法的應(yīng)用

    Python中HMAC加密算法的應(yīng)用

    HMAC?算法可用于驗(yàn)證在應(yīng)用程序之間傳遞或存儲(chǔ)在潛在易受攻擊位置的信息的完整性,因此本文為大家整理了一些Python中HMAC加密算法的應(yīng)用,希望對(duì)大家有所幫助
    2023-05-05
  • Python讀取實(shí)時(shí)數(shù)據(jù)流示例

    Python讀取實(shí)時(shí)數(shù)據(jù)流示例

    今天小編就為大家分享一篇Python讀取實(shí)時(shí)數(shù)據(jù)流示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 如何為Python終端提供持久性歷史記錄

    如何為Python終端提供持久性歷史記錄

    這篇文章主要介紹了如何為Python終端提供持久性歷史記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解python變量的命名和使用

    詳解python變量的命名和使用

    變量名只能包含字母、數(shù)字和下劃線,本文主要介紹了詳解python變量的命名和使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 五分鐘學(xué)會(huì)怎么用Pygame做一個(gè)簡(jiǎn)單的貪吃蛇

    五分鐘學(xué)會(huì)怎么用Pygame做一個(gè)簡(jiǎn)單的貪吃蛇

    這篇文章主要介紹了五分鐘學(xué)會(huì)怎么用Pygame做一個(gè)簡(jiǎn)單的貪吃蛇,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python+Turtle繪制可愛的可達(dá)鴨

    Python+Turtle繪制可愛的可達(dá)鴨

    一年一度的六一兒童節(jié)又來了,祝大朋友小朋友節(jié)日快樂!本文主要介紹如何運(yùn)用Python中的turtle庫(kù)控制函數(shù)繪制可達(dá)鴨,希望你會(huì)喜歡
    2022-05-05
  • python元組的概念知識(shí)點(diǎn)

    python元組的概念知識(shí)點(diǎn)

    在本篇文章里我們給各位整理的是關(guān)于python元組的概念知識(shí)點(diǎn)以及實(shí)例內(nèi)容,需要的朋友們參考下。
    2019-11-11
  • Python中使用PyHook監(jiān)聽鼠標(biāo)和鍵盤事件實(shí)例

    Python中使用PyHook監(jiān)聽鼠標(biāo)和鍵盤事件實(shí)例

    這篇文章主要介紹了Python中使用PyHook監(jiān)聽鼠標(biāo)和鍵盤事件實(shí)例,這個(gè)庫(kù)依賴于另一個(gè)Python庫(kù)PyWin32,并且只能運(yùn)行在Windows平臺(tái),需要的朋友可以參考下
    2014-07-07
  • Python編程實(shí)現(xiàn)下載器自動(dòng)爬取采集B站彈幕示例

    Python編程實(shí)現(xiàn)下載器自動(dòng)爬取采集B站彈幕示例

    這篇文章主要介紹了使用Python編程來實(shí)現(xiàn)一個(gè)下載器可以自動(dòng)爬取采集B站彈幕的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • python使用pyqt寫帶界面工具的示例代碼

    python使用pyqt寫帶界面工具的示例代碼

    本篇文章主要介紹了python使用pyqt寫帶界面工具的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10

最新評(píng)論