Python的ctypes
是否存在已知的内存泄漏?我正在编写一个类似下面代码段的Python脚本,使用ctypes
,某种原因导致内存泄漏。此示例中的"while True
"是为了测试调用函数引起的泄漏。它在Windows上使用Python 2.5.4运行:
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会占用越来越多的内存。似乎需要有两个结构子类,其中一个类具有另一个类的“倍数”(使用*
运算符),但我不确定条件是否比这更基本。即使在循环中添加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
是一个字节吗?有一个计数器,每调用hi()
大约 50,000 次就会打印一次,这样你就知道了。 - agffrom itertools import count
,然后将while True:
更改为for c in count():
,然后在循环中添加if not c % 50000: print c
。然后,如果print
太频繁或太少以至于无用,可以增加或减少那个50000
。 - agf