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

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

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

一般情況下只有需要長期運行的項目才會去關注內存的增長情況,即使是很小部分的內存泄露經過長期的運行仍然會產生很大的隱患。

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

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

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

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

pip?install?objgraph

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

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

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

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

這里初始化一組字典類型的數據對象。

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

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

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

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

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

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

#?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

可以根據返回結果中的對象每次增加的數量來判斷內存泄露的相關情況。

還有一個比較常用的分析函數就是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

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

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

#?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類型的圖片已經生成了,發(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)即可。

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

相關文章

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

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

    這段代碼使用了Python的requests庫來發(fā)送HTTP POST請求,向本地服務器的API發(fā)送數據,并處理響應,一步步解釋這個代碼
    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 序列化與反序列化的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • Python?OpenCV識別行人入口進出人數統(tǒng)計

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

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

    python如何求圓的面積

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

    Pandas實現(xiàn)解析JSON數據與導出的示例詳解

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

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

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

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

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

最新評論

奉贤区| 新丰县| 怀宁县| 九江县| 桦南县| 曲周县| 保德县| 永兴县| 青海省| 杭锦后旗| 静海县| 靖安县| 晋中市| 新巴尔虎左旗| 通化县| 偃师市| 鹤庆县| 碌曲县| 大兴区| 瑞丽市| 勃利县| 吴旗县| 简阳市| 小金县| 昌平区| 威远县| 长丰县| 吉木乃县| 永仁县| 拉萨市| 民权县| 平安县| 兴隆县| 湘潭县| 哈密市| 余干县| 天长市| 巴南区| 浦江县| 中宁县| 安龙县|