中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

為什么python會內(nèi)存泄露-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

霍城網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,霍城網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為霍城成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的霍城做網(wǎng)站的公司定做!

這篇文章運用簡單易懂的例子給大家介紹為什么python會內(nèi)存泄露,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

像Java程序一樣,雖然Python本身也有垃圾回收的功能,但是同樣也會產(chǎn)生內(nèi)存泄漏的問題。在Python程序里,內(nèi)存泄漏是由于一個長期持有的對象不斷的往一個dict或者list對象里添加新的對象, 而又沒有即時釋放,就會導致這些對象占用的內(nèi)存越來越多,從而造成內(nèi)存泄漏。另外,對象的交叉引用也會造成內(nèi)存無法釋放的問題。

那么如果在Python里發(fā)現(xiàn)了內(nèi)存泄漏的問題,如何去查找呢?本文講述了如何使用objgraph這個工具來進行內(nèi)存泄漏的查找。

1、先下載objgraph這個工具:http://mg.pov.lt/objgraph/

https://pypi.python.org/pypi/objgraph

pythonsetup.py install,進行安裝。

2、安裝graphviz

這是一個將圖結(jié)構(gòu)轉(zhuǎn)化成png圖片表示的工具,有了它,就可以通過對象的引用關(guān)系,為最終找到內(nèi)存泄漏的對方提供最好的指導。

windows版下載地址:http://www.graphviz.org/Download_windows.php

ubuntu下安裝:

sudo apt-get install graphviz

這個工具還可以利用graphviz這個工具來生成可視化的對象引用關(guān)系圖,但是根據(jù)個人的使用經(jīng)驗,在對象比較多的時候,生成的圖往往會比較大。

3、如何查找產(chǎn)生泄漏的對象:

objgraph.show_growth()

這個函數(shù)可以說是這個工具中最有用的函數(shù)了,作用是輸出增長的對象。

4、先從一個例子看看怎樣用:

import os
import gc
import objgraph
gc.collect()
print'====================================='
objgraph.show_growth()
 
a = []
 
print'====================================='
objgraph.show_growth()
 
a.append([1,2,3])
 
print'====================================='
objgraph.show_growth()
 
b = ['a','b','c']
del b
 
print'===================================='
objgraph.show_growth()

輸出如下:

=====================================
wrapper_descriptor            1020    +1020
function                      975      +975
builtin_function_or_method     615      +615
dict                          414      +414
method_descriptor             391      +391
weakref                       286      +286
member_descriptor             192      +192
tuple                         181      +181
list                          159      +159
getset_descriptor             132      +132
=====================================
wrapper_descriptor     1031      +11
member_descriptor      196        +4
getset_descriptor      135        +3
weakref               289        +3
dict                  417        +3
list                  160        +1
=====================================
list      161       +1
====================================

從打印可以看出:

第一次調(diào)用show_growth時,實際上打印出來的是當前所有對象的總數(shù)

第二次調(diào)用show_growth時,可以看到list對象增長了1,這正是a = []所創(chuàng)建的,其它增長的對象應(yīng)該是在第一次調(diào)用show_growth函數(shù)內(nèi)部產(chǎn)生的。

當調(diào)用a.append([1,2,3])后,再調(diào)用show_growth,又發(fā)現(xiàn)list對象增長了1個。

再接下來,調(diào)用b =['a','b','c'] 后又馬上調(diào)用del b把這個對象刪除,再調(diào)用show_growth時對象沒有增長。

從上面的例子來看,show_growth可以準確的打印出增長的對象以及增長的個數(shù)。

在實際情況中,通常為了查找出哪些對象有內(nèi)存泄漏,一般用每隔一段時間調(diào)用一次show_growth的方法,然后找出對象的個數(shù)一直在增長的對象,這些對象即為發(fā)生了內(nèi)存泄漏的對象。

說明:為了使show_growth的輸出更為準確,在調(diào)用show_growth時,最好調(diào)用gc.collect()進行一次垃圾對象的回收。

關(guān)于為什么python會內(nèi)存泄露就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站標題:為什么python會內(nèi)存泄露-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://www.rwnh.cn/article0/dsciio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、ChatGPT響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、定制開發(fā)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
磐石市| 贡觉县| 临清市| 平湖市| 象山县| 武汉市| 同德县| 东兴市| 伊春市| 普安县| 巧家县| 宜兰县| 繁峙县| 峡江县| 三江| 丹凤县| 镇巴县| 甘孜| 涟源市| 沂水县| 通化市| 蛟河市| 万山特区| 蒙山县| 长阳| 吉首市| 贵定县| 马龙县| 四会市| 兰考县| 普宁市| 南京市| 贵港市| 桦甸市| 高尔夫| 唐河县| 锦屏县| 都江堰市| 钟祥市| 塔河县| 莱州市|