Статья подготовлена для студентов курса «Web-разработчик на Python» в образовательном проекте OTUS. Проблемы с памятью в приложениях — явление довольно частое. Правда, в Python, где работать с памятью напрямую приходится разве что при написании CPython-расширений, сталкиваться с этим приходится реже. Ещё часть рисков снимают фреймворки. Тем не менее понимать, как распределяется память в приложении, всегда полезно. Давайте посмотрим, какие возможности у нас есть на примере небольшого Django-проекта. Итак, у нас есть простая модель данных: И десяток вьюх, отдающих JSON. И вот где-то среди них у нас утекает память. Прежде всего, нам надо сузить границы поиска. Один из способов — использовать приложение memory-profiler. В его состав входит удобный декоратор, который позволяет смотреть динамику памяти в отдельных функциях. Повесим его на одну из вьюх: Без дополнительных настроек profile выводит результаты прямо в стандартный вывод. И выглядит он примерно так: Абсолютные значения тут