TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7527 3.01K
🏎 Юнит-тестирование производительности: ловим регрессии по числу инструкций CPU

Бенчмарки в CI — это отлично, но они сообщают о проблеме слишком поздно. Идеально было бы получать сигнал о том, что код стал работать медленнее, прямо во время запуска локальных тестов. Но как сделать это стабильным, если время выполнения (`elapsed time`) постоянно скачет?

Автор в статье предлагает использовать количество инструкций CPU вместо времени.

Если вы изменили код, количество инструкций CPU (почти всегда) изменится:
🔛 Это не гарантирует, что код стал медленнее (влияют кэши, предсказания переходов и т.д.), но это верный признак того, что производительность могла измениться.
🔛 Это дает гораздо более стабильные цифры, чем замер времени, особенно на одной и той же машине.

Для Linux можно использовать библиотеку py-perf-event, которая дает доступ к системному вызову perf_event_open().

Пример теста:

from py_perf_event import measure, Hardware
from wordcount import wordcount

def test_speed():
[instruction_count] = measure(
[Hardware.INSTRUCTIONS],
wordcount,
DATA
)
# Сравниваем с эталоном (округление помогает избежать шума)
assert round(instruction_count / 100_000) == 3127, "Скорость изменилась!"



Чтобы добиться идеальной точности, можно:
1. Фиксировать PYTHONHASHSEED: чтобы рандом в хешировании словарей не влиял на проход по коду.
2. Отключать ASLR (рандомизацию адресного пространства): через команду setarch x86_64 -R pytest.
3. Использовать один и тот же билд Python: например, через uv python install.

📍 Навигация: Вакансии • Задачи • Собесы

🐸 Библиотека питониста

#буст
  • ❤ 4
  • 👍 1
More from @pyproglib
  1. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  2. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  3. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  4. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  5. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  6. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →