Я хочу использовать команду управления для одноразового анализа зданий в штате Массачусетс. Я сократил код ошибки до 8-фрагментного кода, который демонстрирует проблему, с которой я сталкиваюсь. Комментарии просто объясняют, почему я хочу сделать это вообще. Я запускаю код ниже дословно, в противном случае пустой команды управления
zips = ZipCode.objects.filter(state='MA').order_by('id')
for zip in zips.iterator():
buildings = Building.objects.filter(boundary__within=zip.boundary)
important_buildings = []
for building in buildings.iterator():
# Some conditionals would go here
important_buildings.append(building)
# Several types of analysis would be done on important_buildings, here
important_buildings = None
Когда я запускаю этот точный код, я обнаруживаю, что использование памяти постоянно увеличивается с каждым внешним циклом итерации (я использую print('mem', process.memory_info().rss)
для проверки использования памяти).
Похоже, что important_buildings
список коробление памяти, даже после выхода из области видимости. Если я заменю important_buildings.append(building)
на _ = building.pk
, он больше не потребляет много памяти, но мне нужен этот список для некоторых анализов.
Итак, мой вопрос: как я могу заставить Python выпустить список моделей Django, когда он выходит из области видимости?
Редактировать: я чувствую, что есть немного уловка 22 при переполнении стека - если я пишу слишком много деталей, никто не хочет тратить время на его чтение (и это становится менее применимой проблемой), но если я пишу слишком мало подробно, я рискую пропустить часть проблемы. В любом случае, я действительно ценю ответы и планирую опробовать некоторые предложения на этих выходных, когда у меня наконец появится возможность вернуться к этому !!