Как определить общий объем памяти Python-процесса

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Воспользуйтесь модулем psutil, чтобы получить информацию об используемой памяти:

Python
Скопировать код
import psutil
print(f"Память: {psutil.Process().memory_info().rss / 1024 ** 2:.2f} МБ")

Этот код выведет величину Resident Set Size (RSS), отображающую объем оперативной памяти, занятый текущим процессом, в мегабайтах.

Кинга Идем в IT: пошаговый план для смены профессии

Углубляемся в управление памятью

Освоение особенностей управления памятью в Python критически важно для оптимизации ваших приложений. Библиотека psutil предоставляет доступ к детальной информации о системе и запущенных процессах.

  1. Установка

    Сначала установите psutil, если это ещё не сделано, командой pip install psutil.

  2. Память в байтах

    Текущий объем памяти, занятой вашим процессом, можно получить следующим образом:

    Python
    Скопировать код
    import psutil
    process = psutil.Process()
    print(f"Употребленная память 🤓: {process.memory_info().rss} байт")
  3. Python 2.7 или psutil 5.6.3

    Если вы работаете на Python 2.7 или psutil 5.6.3, используйте следующий синтаксис:

    Python
    Скопировать код
    print(process.memory_info()[0])  # Прямо и ясно!
  4. Система Windows

    В случае с Windows вам понадобится Windows Management Instrumentation (WMI), и нужно будет использовать библиотеку WMI для доступа к метрикам через параметр WorkingSet.

  5. Для 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} МБ")
  6. Unix-гуру

    Для Unix-систем командная строка ps -u -p <process_id> может оказаться незаменимой при мониторинге использования памяти конкретного процесса.

Платформонезависимые методы

Способы измерения использования памяти могут отличаться в зависимости от платформы. В Unix-системах команда getrusage(resource.RUSAGE_SELF) предоставляет данные по текущему процессу, а getrusage(resource.RUSAGE_BOTH) соберет информацию по всем выполняемым процессам там, где это поддерживается.

Linux-фишка: Прочитав файл /proc/self/status, вы получите возможность увидеть величину VmRSS (Resident Set Size) напрямую. А если поработать со словарем, можно легко перевести из одних единиц измерения в другие:

Python
Скопировать код
scales = {'Джоули': 1, 'Калории': 4.18, 'кВт·ч': 3.6e6}
memory_usage = memory_rss * scales['Калории']

Добавьте в текст дозу юмора для удобочитаемости, например: "Яблоко в день – и с доками не придется служить караул!"

Лучшая практика: Детальное управление памятью

Для детального контроля использования памяти на уровне отдельных строк используйте memory_profiler, который можно установить через pip. Именно гранулярный контроль за расходом памяти в режиме реального времени вам и нужен.

Если вы хотите раскрыть тайну утечек памяти и особенностей её выделения, обратите внимание на модуль tracemalloc. Этот инструмент, как настоящий Шерлок Холмс в мире Python, поможет вам в этом.

Визуализация

Взгляните на Python-процесс как на дом, где каждая комната имеет свой "вес":

Markdown
Скопировать код
Дом Памяти Python:
🚪🛏️ Комната 1: Переменные и Объекты – 'Вес: 5кг'
🚪🍳 Комната 2: Библиотеки – 'Вес: 3кг'
🚪🛋️ Комната 3: Интерпретатор – 'Вес: 2кг'
Общий вес дома: 🏋️ 10кг

Употребляемая память – это вес, который каждый элемент вашей программы добавляет к общему весу дома:

Markdown
Скопировать код
🏠🏋️‍♂️: [🛏️ 5кг] + [🍳 3кг] + [🛋️ 2кг] = Всего в памяти 🧠 10кг

Представьте использование памяти как общий "вес" всех компонентов вашей программы.

Проактивная проверка и компромиссы

Важно не только устранять проблемы, но и предотвращать их появление, зная, какие участки кода наиболее интенсивно используют память. Регулярные unit-тесты с проверками на использование памяти помогут избежать нежелательных сюрпризов.

Различные структуры данных потребляют разное количество памяти. Например, использование __slots__ в классах может сэкономить память при работе с большим количеством объектов, но могут быть и недостатки этого метода.

Полезные материалы

  1. Документация psutil — подробное руководство по мониторингу памяти с помощью psutil.
  2. memory-profiler на PyPI — страница модуля memory_profiler, инструмента для детального анализа использования памяти.
  3. Управление памятью в Python на Real Python — статья для углубления в принципы работы с памятью в Python.
  4. Документация модуля sys — документация модуля sys. Рассказывает о функциях для работы с памятью, включая sys.getsizeof.