Python有没有已知的内存泄漏?我正在研究Python脚本,其代码如下所示,使用,由于某些原因导致内存泄漏。本例中的“while True
”用于测试调用函数引起的泄漏。它被Windows上使用Python 2.5.4运行:Python:CTypes结构内存泄漏
import ctypes
def hi():
class c1(ctypes.Structure):
_fields_=[('f1',ctypes.c_uint8)]
class c2(ctypes.Structure):
_fields_=[('g1',c1*2)]
while True:
test=hi()
泄漏可以使用ProcessExplorer进行测试 - 因为它不断循环,Python会越来越多的内存占用。它似乎需要有两个Structure子类,其中一个类具有另一个类的“倍数”(使用*
运算符),但我不确定该条件是否比这更基本。即使循环中添加了del test
,仍然会泄漏内存。
关于可能导致此问题的任何想法?
编辑:因为有人认为它可能没有垃圾回收的是,这里是一个编辑的版本,做垃圾收集,但仍然出现内存泄漏:
import gc
import ctypes
def hi():
class c1(ctypes.Structure):
_fields_=[('f1',ctypes.c_uint8)]
class c2(ctypes.Structure):
_fields_=[('g1',c1*2)]
while True:
test=hi()
test2=gc.collect()
它泄漏多少?它为每个创建的“c1”创建一个字节?有一个计数器,每打印50,000个电话给'hi()'左右,所以你知道。 – agf
在ProcessExplorer中,“工作集”内存每秒稳定增加大约20-30 KB,“私人字节”每隔一段时间都会稳步增长。大约12分钟后,我已经超过59 MB的内存,并计算在解释器中运行的第二个片段。如何在代码中放置一个计数器,告诉你有多少内存被占用?任何人都可以在此证实我吗? – user553702
最简单的方法是在顶部添加'from itertools import count',然后在count():中将c改为'true:',然后在循环中添加'如果不是c%50000:print c' 。然后,如果“印刷品”过于频繁或不常用,则增加或减少“50000”。 – agf