Как определить общий объем памяти Python-процесса
Быстрый ответ
Воспользуйтесь модулем psutil, чтобы получить информацию об используемой памяти:
import psutil
print(f"Память: {psutil.Process().memory_info().rss / 1024 ** 2:.2f} МБ")
Этот код выведет величину Resident Set Size (RSS), отображающую объем оперативной памяти, занятый текущим процессом, в мегабайтах.
Углубляемся в управление памятью
Освоение особенностей управления памятью в Python критически важно для оптимизации ваших приложений. Библиотека psutil предоставляет доступ к детальной информации о системе и запущенных процессах.
Установка
Сначала установите psutil, если это ещё не сделано, командой
pip install psutil
.Память в байтах
Текущий объем памяти, занятой вашим процессом, можно получить следующим образом:
PythonСкопировать кодimport psutil process = psutil.Process() print(f"Употребленная память 🤓: {process.memory_info().rss} байт")
Python 2.7 или psutil 5.6.3
Если вы работаете на Python 2.7 или psutil 5.6.3, используйте следующий синтаксис:
PythonСкопировать кодprint(process.memory_info()[0]) # Прямо и ясно!
Система Windows
В случае с Windows вам понадобится Windows Management Instrumentation (WMI), и нужно будет использовать библиотеку WMI для доступа к метрикам через параметр
WorkingSet
.Для Linux-пользователей
В Linux можно анализировать информацию о памяти, просматривая файлы
/proc/self/status
или/proc/self/statm
. Учтите необходимость преобразования из килобайт:PythonСкопировать кодmemory_in_kb = float(process.memory_info().rss) / 1024 memory_in_mb = memory_in_kb / 1024 print(f"Любители измерять память в МБ, оцените: {memory_in_mb:.2f} МБ")
Unix-гуру
Для Unix-систем командная строка
ps -u -p <process_id>
может оказаться незаменимой при мониторинге использования памяти конкретного процесса.
Платформонезависимые методы
Способы измерения использования памяти могут отличаться в зависимости от платформы. В Unix-системах команда getrusage(resource.RUSAGE_SELF)
предоставляет данные по текущему процессу, а getrusage(resource.RUSAGE_BOTH)
соберет информацию по всем выполняемым процессам там, где это поддерживается.
Linux-фишка: Прочитав файл /proc/self/status
, вы получите возможность увидеть величину VmRSS (Resident Set Size) напрямую. А если поработать со словарем, можно легко перевести из одних единиц измерения в другие:
scales = {'Джоули': 1, 'Калории': 4.18, 'кВт·ч': 3.6e6}
memory_usage = memory_rss * scales['Калории']
Добавьте в текст дозу юмора для удобочитаемости, например: "Яблоко в день – и с доками не придется служить караул!"
Лучшая практика: Детальное управление памятью
Для детального контроля использования памяти на уровне отдельных строк используйте memory_profiler
, который можно установить через pip
. Именно гранулярный контроль за расходом памяти в режиме реального времени вам и нужен.
Если вы хотите раскрыть тайну утечек памяти и особенностей её выделения, обратите внимание на модуль tracemalloc
. Этот инструмент, как настоящий Шерлок Холмс в мире Python, поможет вам в этом.
Визуализация
Взгляните на Python-процесс как на дом, где каждая комната имеет свой "вес":
Дом Памяти Python:
🚪🛏️ Комната 1: Переменные и Объекты – 'Вес: 5кг'
🚪🍳 Комната 2: Библиотеки – 'Вес: 3кг'
🚪🛋️ Комната 3: Интерпретатор – 'Вес: 2кг'
Общий вес дома: 🏋️ 10кг
Употребляемая память – это вес, который каждый элемент вашей программы добавляет к общему весу дома:
🏠🏋️♂️: [🛏️ 5кг] + [🍳 3кг] + [🛋️ 2кг] = Всего в памяти 🧠 10кг
Представьте использование памяти как общий "вес" всех компонентов вашей программы.
Проактивная проверка и компромиссы
Важно не только устранять проблемы, но и предотвращать их появление, зная, какие участки кода наиболее интенсивно используют память. Регулярные unit-тесты с проверками на использование памяти помогут избежать нежелательных сюрпризов.
Различные структуры данных потребляют разное количество памяти. Например, использование __slots__
в классах может сэкономить память при работе с большим количеством объектов, но могут быть и недостатки этого метода.
Полезные материалы
- Документация psutil — подробное руководство по мониторингу памяти с помощью psutil.
- memory-profiler на PyPI — страница модуля memory_profiler, инструмента для детального анализа использования памяти.
- Управление памятью в Python на Real Python — статья для углубления в принципы работы с памятью в Python.
- Документация модуля sys — документация модуля
sys
. Рассказывает о функциях для работы с памятью, включаяsys.getsizeof
.