mport time
def test():
for i in range ( 1000000 * 10 ):
del i
if ( __name__ == "__main__" ):
test()
while ( True ):
time.sleep( 1 )
觀察mem:內存維持不變!
從這點可以猜測:python不是立即釋放資源的.
個人測試代碼:
-----------------------------------------------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--------------------------------------
運行 python test0.py
"while ( True ):
time.sleep( 1 )
"
保證python不退出.
發現python的內存占用率為60%.
如何解決這個問題呢?看下面的:
-----------------------------------------------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()#內存使用率占40%
test_1()#內存使用率占0.2%
print "---------------------"
while ( True ):
time.sleep( 1 )
-----------------------------------------------test1.py-------------------------------------
我想問題:問題也許解決了.
這就要看你的實際需求是什么了.
例如:
我做過一個爬蟲程序,如果不斷往這個線程里面傳遞url,那么這個線程不到一會就掛了.我的改進方法:就是控制這線程能夠接受的url隊列長度.以及其他的優化.
其實這個不是循環導致的內存被python持有,而是range( n )讓python分配了很多的內存.退出test(),python回收內存,但是python并不釋放了,而是讓pool持有內存空間.