Я создаю приложение, используя Tkinter и Python 2.7.
У меня утечка памяти в этом приложении. При поиске причин я обнаружил, что у меня протекает множество TKinter.CallWrapper
экземпляров.
Эти экземпляры имеют только одну ссылку на них типа instancemethod __call__(bound)
.
здесь вывод objgraph
с использованием следующей строки (раньше я принудительно собирал мусор с gc.collect()
):
objgraph.show_backrefs(objgraph.get_leaking_objects(objgraph.by_type('Tkinter.CallWrapper'))[502:504], output=f, max_depth=10**100)
.
![Leak](https://i.stack.imgur.com/ujQ2H.png)
Я не смог воспроизвести это в меньшем масштабе, поэтому у меня нет исполняемого кода.
Что может хранить эти экземпляры в памяти? Они не являются частью ссылочного цикла, и на них не ссылаются ни из какого фрейма или глобальной переменной. Есть ли другая возможная причина, о которой я не знаю?
С чего мне начать расследование?