Забота о памяти с Python
Столкнувшись с нехваткой оперативной памяти, понимаешь, что с небрежным отношением к размещению данных и очистке мусора нужно заканчивать. В этой статье я расскажу о самых простых и эффективных инструментах, которые эффективны и легко применимы.
В первую очередь - это мониторинг объявленных переменных, проверка занимаемой ими памяти и своевременная очистка, а также прекращение практики выделения для новых данных места по умолчанию, так как в большинстве случаев это намного больше, чем необходимо.
Лучший из способов отслеживания созданных вами переменных - это использование магической команды (подробнее читай здесь) %whos, а измерения памяти - функции getsizeof (выводит размер в байтах) модуля sys:
import pandas as pd import numpy as np data = pd.DataFrame(np.random.uniform(1,200,size=50000000).astype(np.float16))
%whos
import sys sys.getsizeof(data)
Удаление ненужных и тяжелых объектов из памяти следует производить командой del:
del data
Теперь что касается аккуратного резервирования места в оперативной памяти. Создадим numpy массив с типом по умолчанию (int64 - 8 байт на число) из 50 млн элементов. Его ориентировочный размер будет - 400 Мб:
Зная специфику данных, мы могли все хранить так:
Теперь массив занял около 50 Мб.
Ниже привожу список числовых типов данных в NumPy для учета при создании массивов и экономии памяти:
Логический
Целочисленный знаковый
Целочисленный беззнаковый
Дробный
Комплексный
Больше о типах можно прочитать здесь.