import json
import time
from itertools import count
def keygen(size):
for i in count(1):
s = str(i)
yield '0' * (size - len(s)) + str(s)
def jsontest(num):
keys = keygen(20)
kvjson = json.dumps(dict((keys.next(), '0' * 200) for i in range(num)))
kvpairs = json.loads(kvjson)
del kvpairs # Not required. Just to check if it makes any difference
print 'load completed'
jsontest(500000)
while 1:
time.sleep(1)
Linux top显示,在完成“jsontest”函数后,Python进程占用了约450Mb的RAM。如果省略对“json.loads”的调用,则不会观察到此问题。在该函数执行后进行gc.collect可以释放内存。
看起来内存没有保存在任何缓存或Python的内部内存分配器中,因为显式调用gc.collect会释放内存。
这是因为垃圾收集的阈值(700、10、10)从未达到吗?
我在jsontest之后放了一些代码以模拟阈值。但是它没有起作用。
jsontest
后尝试打印gc.get_count()
,一切都会变得清晰明了。此外,调用gc.collect
有什么问题吗? - Gareth Rees