最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)內(nèi)存泄露排查的示例詳解

 更新時間:2023年01月21日 10:13:34   作者:Sir?老王  
一般在python代碼塊的調(diào)試過程中會使用memory-profiler、filprofiler、objgraph等三種方式進行輔助分析,今天這里主要介紹使用objgraph對象提供的函數(shù)接口來進行內(nèi)存泄露的分析,感興趣的可以了解一下

一般情況下只有需要長期運行的項目才會去關(guān)注內(nèi)存的增長情況,即使是很小部分的內(nèi)存泄露經(jīng)過長期的運行仍然會產(chǎn)生很大的隱患。

python本身也是支持垃圾的自動回收的,但是在特定的情況下也是會出現(xiàn)內(nèi)存泄露的問題的。

比如對于很多全局的列表(list)/字典(dict)等對象在經(jīng)過不斷的數(shù)據(jù)賦值而沒有進行手動回收,或者某些對象被不停的循環(huán)引用而不能及時的進行回收等都會產(chǎn)生內(nèi)存泄露的情況。

一般在python代碼塊的調(diào)試過程中會使用memory-profiler、filprofiler、objgraph等三種方式進行輔助分析,今天這里主要介紹使用objgraph對象提供的函數(shù)接口來進行內(nèi)存泄露的分析。

objgraph是python的非標準模塊,因此需要使用pip的方式安裝一下。

pip?install?objgraph

更多詳細的介紹可以訪問下面的官方地址進行查看。

https://mg.pov.lt/objgraph/

接下來就可以直接將objgraph導(dǎo)入到我們的代碼塊中進行使用了。

#?Importing?the?objgraph?module?and?renaming?it?to?graph.
import?objgraph?as?graph

這里初始化一組字典類型的數(shù)據(jù)對象。

dict_?=?{
????'姓名':?['Python',?'Java',?'Scala'],
????'年齡':?['21',?'22',?'19']
}

通過objgraph.count()函數(shù),可以統(tǒng)計出GC中的dict_對象的數(shù)目是多少。

#?Counting?the?number?of?dict_?objects?in?the?GC.
print(graph.count(dict_))

和objgraph.count()函數(shù)對應(yīng)的是可以使用by_type返回該對象在GC中的列表,若是GC返回的為空的列表說明已經(jīng)被回收了。

#?Returning?a?list?of?dict_?objects?in?the?GC.
print(graph.by_type(dict_))

在統(tǒng)計內(nèi)存泄露時比較好用的函數(shù)就是graph.show_growth()函數(shù),可以統(tǒng)計自上次調(diào)用以來增加得最多的對象。

#?Showing?the?growth?of?objects?in?the?memory?since?the?last?time?it?was?called.
print(graph.show_growth())

#?function???????????????????????3013?????+3013
#?tuple??????????????????????????1463?????+1463
#?dict???????????????????????????1417?????+1417
#?wrapper_descriptor?????????????1178?????+1178
#?ReferenceType???????????????????883??????+883
#?method_descriptor???????????????814??????+814
#?builtin_function_or_method??????794??????+794
#?getset_descriptor???????????????514??????+514
#?type????????????????????????????463??????+463
#?list????????????????????????????436??????+436
#?None

可以根據(jù)返回結(jié)果中的對象每次增加的數(shù)量來判斷內(nèi)存泄露的相關(guān)情況。

還有一個比較常用的分析函數(shù)就是graph.show_most_common_types(),可以按照從大到小的方式列出對象實例比較多的情況。

#?Showing?the?most?common?types?of?objects?in?the?memory.
print(graph.show_most_common_types())

#?function???????????????????3013
#?tuple??????????????????????1463
#?dict???????????????????????1417
#?wrapper_descriptor?????????1178
#?ReferenceType??????????????883
#?method_descriptor??????????814
#?builtin_function_or_method?794
#?getset_descriptor??????????514
#?type???????????????????????463
#?list???????????????????????436
#?None

最后一個比較使用函數(shù)就是show_backrefs函數(shù),使用它可以分析出內(nèi)存泄露的原因是什么。

它會生成一張有關(guān)objs的引用圖,可以看出對象為什么不釋放?只是調(diào)用該函數(shù)時的參數(shù)比較多,下面是該函數(shù)的接口。

#?def?show_backrefs(objs,?max_depth=3,?extra_ignore=(),?filter=None,?too_many=10,
#???????????????????highlight=None,?filename=None,?extra_info=None,
#???????????????????refcounts=False,?shortnames=True,?output=None,
#???????????????????extra_node_attrs=None):

我們還是和上面一樣使用dict_作為對象進行分析。

#?Showing?the?back?references?of?the?dict_?object.
graph.show_backrefs(dict_)

執(zhí)行完成后dot類型的圖片已經(jīng)生成了,發(fā)現(xiàn)出現(xiàn)了下面的錯誤,意思是沒有發(fā)現(xiàn)支持dot的圖像組件。

#?Graph?written?to?C:\Users\86159\AppData\Local\Temp\objgraph-dkqm85f0.dot?(4?nodes)
#?Graph?viewer?(xdot)?and?image?renderer?(dot)?not?found,?not?doing?anything?else

可以使用pip的方式分別安裝graphviz xdot,這兩個python的非標準模塊。

pip?install?graphviz?xdot

若是查看.dot決策樹圖像可以使用graphviz工具,可以到下面地址進行下載安裝。

https://graphviz.org/download/

安裝完成后配置環(huán)境變量,然后重啟開發(fā)工具(這里使用的是pycharm)即可。

到此這篇關(guān)于Python實現(xiàn)內(nèi)存泄露排查的示例詳解的文章就介紹到這了,更多相關(guān)Python內(nèi)存泄露排查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python請求庫發(fā)送HTTP POST請求的示例代碼

    Python請求庫發(fā)送HTTP POST請求的示例代碼

    這段代碼使用了Python的requests庫來發(fā)送HTTP POST請求,向本地服務(wù)器的API發(fā)送數(shù)據(jù),并處理響應(yīng),一步步解釋這個代碼
    2024-08-08
  • Python并發(fā)編程之未來模塊Futures

    Python并發(fā)編程之未來模塊Futures

    這篇文章主要為大家介紹了Python的未來,python并發(fā)編程之未來模塊Futures的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Pyhacker實現(xiàn)端口掃描器

    Pyhacker實現(xiàn)端口掃描器

    這篇文章主要為大家介紹了Pyhacker實現(xiàn)端口掃描器的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python報錯AssertionError:can only test a child proc問題

    Python報錯AssertionError:can only test a c

    這篇文章主要介紹了Python報錯AssertionError:can only test a child proc問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 淺析Python 序列化與反序列化

    淺析Python 序列化與反序列化

    這篇文章主要介紹了Python 序列化與反序列化的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計

    Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計

    本文主要介紹了Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-01-01
  • python如何求圓的面積

    python如何求圓的面積

    在本篇文章里小編給大家分享了關(guān)于python求圓面積的實例代碼及相關(guān)擴展內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Pandas實現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的示例詳解

    Pandas實現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的示例詳解

    其實使用pandas解析JSON?Dataset要方便得多,所以這篇文章主要為大家介紹了Pandas實現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的具體方法,需要的小伙伴可以收藏一下
    2023-07-07
  • Python基于數(shù)列實現(xiàn)購物車程序過程詳解

    Python基于數(shù)列實現(xiàn)購物車程序過程詳解

    這篇文章主要介紹了Python基于數(shù)列實現(xiàn)購物車程序過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 使用python實現(xiàn)md5加密

    使用python實現(xiàn)md5加密

    這篇文章主要介紹了使用python實現(xiàn)md5加密,md5為計算機安全領(lǐng)域廣泛使用的一種散列函數(shù),用于確保信息傳輸完整一致,需要的朋友可以參考下
    2023-04-04

最新評論

衢州市| 汝城县| 蓝山县| 蒲江县| 齐齐哈尔市| 饶河县| 英吉沙县| 云霄县| 屯留县| 宜宾县| 沧州市| 星子县| 昌都县| 西乌珠穆沁旗| 宣恩县| 沙雅县| 清水河县| 阿拉尔市| 临夏县| 磴口县| 泌阳县| 万盛区| 洛南县| 邢台县| 且末县| 漠河县| 朝阳区| 伊金霍洛旗| 满洲里市| 巴马| 陆河县| 安福县| 白城市| 留坝县| 灵川县| 德兴市| 务川| 洪雅县| 全南县| 北流市| 西丰县|