Имеет ли 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()