Python 小塊空間內(nèi)存管理TEST ref from: http://www.javaeye.com/topic/309753
mport timedef test():
for i in range ( 1000000 * 10 ):
del i
if ( __name__ == "__main__" ):
test()
while ( True ):
time.sleep( 1 )
觀(guān)察mem:內(nèi)存維持不變!
從這點(diǎn)可以猜測(cè):python不是立即釋放資源的.
個(gè)人測(cè)試代碼:
-----------------------------------------------test0.py-------------------------------------
import time
def test():
for i in range ( 1000000 * 10 ):
del i
def test_2():
#i = range ( 1000000 * 10 )
#del i
pass
def test_3():
#i = "*" * ( 1000000 * 10 )
#del i
pass
if ( __name__ == "__main__" ):
for i in range( 10 ):
test()
test_2()
test_3()
time.sleep( 1 )
while ( True ):
time.sleep( 1 )
-----------------------------------------------------test0.py--------------------------------------
運(yùn)行 python test0.py
"while ( True ):
time.sleep( 1 )
"
保證python不退出.
發(fā)現(xiàn)python的內(nèi)存占用率為60%.
如何解決這個(gè)問(wèn)題呢?看下面的:
-----------------------------------------------test1.py-------------------------------------
#coding=utf-8
import time
max_number = 1000000 * 10
def test_0():
for i in range ( max_number ):
del i
def test_1():
for i in range( 1000 ):
for i in range ( max_number / 1000 ):
del i
if ( __name__ == "__main__" ):
#test_0()#內(nèi)存使用率占40%
test_1()#內(nèi)存使用率占0.2%
print "---------------------"
while ( True ):
time.sleep( 1 )
-----------------------------------------------test1.py-------------------------------------
我想問(wèn)題:問(wèn)題也許解決了.
這就要看你的實(shí)際需求是什么了.
例如:
我做過(guò)一個(gè)爬蟲(chóng)程序,如果不斷往這個(gè)線(xiàn)程里面?zhèn)鬟furl,那么這個(gè)線(xiàn)程不到一會(huì)就掛了.我的改進(jìn)方法:就是控制這線(xiàn)程能夠接受的url隊(duì)列長(zhǎng)度.以及其他的優(yōu)化.
其實(shí)這個(gè)不是循環(huán)導(dǎo)致的內(nèi)存被python持有,而是range( n )讓python分配了很多的內(nèi)存.退出test(),python回收內(nèi)存,但是python并不釋放了,而是讓pool持有內(nèi)存空間.
posted on 2009-11-27 16:54 九寶 閱讀(465) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): Python