Я написал некоторое расширение C для своих программ на python, и я только что заметил, что есть проблема с утечкой памяти, однако сама программа на C не пропускает память, поэтому я предполагаю, что есть проблема с подсчетом ссылок. В настоящее время, когда я использую консоль python для запуска своей программы, после завершения вычислений общая память python3 действительно велика, что указывает на то, что некоторые объекты не выпущены, могу ли я узнать, какие объекты есть или когда объекты выделены?
Расширение C является частью большого пакета, поэтому вставить сюда весь пакет невозможно.
getrefcount()
может помочь, если вы знаете, какие объекты подозреваются в утечке docs.python. org/2/library/sys.html#sys.getrefcount - person slezica   schedule 28.08.2016del object
, он все равно не вызывается. @slezica - person 1a1a11a   schedule 28.08.2016getrefcount
, другая ссылка принадлежитgetrefcount
. В оболочке Pythonx = {}; sys.getrefcount(x)
дает2
. Это означает, что вызывающая сторонаgetrefcount
владеет единственной ссылкой. Если вы потеряете его, он должен быть собран в мусор. Вы теряете его? Вы уверены, что C не протекает? Я бы попробовалvalgrind
. Так же__del__
не очень надежен вcpython
, хотя специфики не помню - person slezica   schedule 28.08.2016