Поместите это в верхнюю часть вашей программы
import gc
gc.set_debug(gc.DEBUG_STATS)
, и вы получите распечатку, когда есть коллекция.Вы увидите, что в вашем примере кода нет коллекции после завершения jsontest
до завершения программы.
Вы можете поставить
print gc.get_count()
, чтобы увидеть текущие значения.Первое число - это превышение выделений над освобождениями со времени последней коллекции поколения 0;второй (соответственно третий) - это количество раз, когда поколение 0 (соответственно 1) было собрано с момента последнего сбора поколения 1 (соответственно 2).Если вы напечатаете их сразу после завершения jsontest
, вы увидите, что число равно (548, 6, 0)
или что-то подобное (без сомнения, это зависит от версии Python).Таким образом, пороговое значение не было достигнуто и сбор данных не проводился.
Это типичное поведение для планирования сбора мусора на основе порогов.Если вам необходимо своевременно возвращать в операционную систему свободную память, то вам необходимо объединить планирование на основе порогов с планированием на основе времени (то есть запросить другую коллекцию по истечении определенного времени, прошедшего с момента последней коллекции)., даже если порог не был достигнут).