> Как измерить потребление ресурсов решения (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: Сбер

Стек: Python

> Пример ответа

Для измерения потребления ресурсов Python-решения я использую комбинацию инструментов:

1. Профилирование CPU и памяти

  • cProfile - встроенный модуль для детального профилирования времени выполнения функций.
  • memory_profiler - сторонняя библиотека для отслеживания использования памяти построчно.
  • tracemalloc - встроенный модуль для отслеживания выделения памяти.

2. Мониторинг в реальном времени

  • psutil - кроссплатформенная библиотека для получения данных о CPU, памяти, диске и сети процесса.
  • resource (Unix) - для лимитов и статистики по времени CPU и памяти.

3. Системные утилиты

  • time - замер времени выполнения скрипта.
  • top/htop - для общего мониторинга процесса.
  • valgrind (с массой инструментов) - для глубокого анализа памяти.

Пример кода для замера CPU и памяти с psutil:

PYTHON
import psutil
import os
def measure_resources(func):
def wrapper(*args, **kwargs):
process = psutil.Process(os.getpid())
cpu_before = process.cpu_percent(interval=0.1)
mem_before = process.memory_info().rss
result = func(*args, **kwargs)
cpu_after = process.cpu_percent(interval=0.1)
mem_after = process.memory_info().rss
print(f"CPU: {cpu_after - cpu_before:.2f}%, Mem: {(mem_after - mem_before)/1024:.2f} KB")
return result
return wrapper

4. Для production-сред

  • Использую метрики Prometheus + Grafana с экспортерами (например, prometheus_client для Python).
  • Логирование времени выполнения и размера данных через structlog или logging.

Важно:

  • Измерения проводить многократно (не менее 5-10 раз) для усреднения.
  • Учитывать фоновые процессы и GC Python.
  • Для асинхронных решений - asyncio профилирование через asyncio.run() с замером времени.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью