У меня есть большая серия наборов растровых данных, представляющих месячные осадки за несколько десятилетий.Я написал скрипт на Python, который зацикливается на каждом растре и выполняет следующие действия:
- Преобразует растр в массив с замаскированным массивом,
- Выполняет множество алгебр массивов для вычисленияновый уровень воды,
- Записывает результат в выходной растр.
- Повтор
Скрипт представляет собой длинный список уравнений алгебры массивов, заключенный в оператор цикла.
Все работает хорошо, если я просто запускаю скрипт на небольшой части своих данных (скажем, за 20 лет), но если я пытаюсь обработать всю партию, я получаю MemoryError
.Ошибка не дает больше информации, чем эта (за исключением того, что она выделяет строку в коде, из-за которой Python отказался).
К сожалению, я не могу легко обработать свои данные кусками - мне действительно нужнобыть в состоянии сделать все сразу.Это связано с тем, что в конце каждой итерации выход (уровень воды) возвращается в следующую итерацию в качестве начальной точки.
В настоящее время мое понимание программирования является очень базовым, но я подумал, что всеиз моих объектов просто будут перезаписаны в каждом цикле.Я (тупо?) Предположил, что если коду удалось один раз успешно выполнить цикл, то он должен иметь возможность бесконечного цикла без использования большего и большего количества памяти.
Я пытался читать различные фрагменты документации и обнаружил кое-чтоназывается "Сборщик мусора", но я чувствую, что я выхожу из глубины и мой мозг тает!Может ли кто-нибудь предложить некоторое базовое понимание того, что на самом деле происходит с объектами в памяти, когда мой код зацикливается?Есть ли способ освобождения памяти в конце каждого цикла, или есть какой-то более «питонический» способ кодирования, который вообще избегает этой проблемы?