317. Скрипты запуска PyPy
Добавляем явные скрипты запуска PyPy для ручного выполнения.
Урок 317 из 356 · tests/chapter_10_performance/test_317_pypy_launchers.py
Файлы для создания в корне репозитория
launcher.sh
launcher.cmdЗачем нужен этот шаг
PyPy может повысить пропускную способность ядра эмулятора, поскольку значительная часть эмулятора — это код Python, выполняющийся в плотных циклах. Вместо изменения pyproject.toml или принуждения всех студентов использовать PyPy по умолчанию, этот шаг добавляет явные ручные скрипты запуска.
После создания этих скриптов запуска студентам следует использовать их для ручных экспериментов по производительности вместо прямого запуска main.py через CPython.
Использование в Linux/macOS
sh launcher.shили, если было добавлено право на выполнение:
chmod +x launcher.sh
./launcher.shИспользование в командной строке Windows
launcher.cmdОжидаемый ручной сигнал
Счётчик FPS, добавленный ранее, должен улучшиться, когда ядро эмулятора выигрывает от PyPy. После более быстрого пути загрузки framebuffer в pygame PyPy может заставить эмулятор работать быстрее реальной скорости NES. В ходе разработки курса совместный эффект более быстрой отрисовки pygame и PyPy давал примерно 90-120 FPS на ручном пути с ROM.
Точное число зависит от машины и состояния ROM, но теперь вывод FPS в терминале — это доказательство для сравнения:
fps=30.0 # example after faster pygame drawing on CPython
fps=100.0 # example after faster pygame drawing + PyPy launcherЕсли FPS теперь выше скорости NES, это хорошее доказательство того, что следующий шаг должен добавить выравнивание кадров / контроль ожидаемой скорости, чтобы ручная игра не работала слишком быстро.
Ожидаемая команда, делегируемая обоими запускаторами
uv run --python pypy python main.pyПример для Linux/macOS
#!/usr/bin/env sh
# Run NES with PyPy through uv.
# Usage:
# sh launcher.sh
# or:
# chmod +x launcher.sh
# ./launcher.sh
uv run --python pypy python main.pyПример для Windows CMD
@echo off
REM Run NES with PyPy through uv.
REM Usage:
REM launcher.cmd
uv run --python pypy python main.pyВажное правило тестирования
Эти тесты не должны выполнять скрипты запуска. Их запуск запустил бы ручной интерфейс pygame и потребовал бы локальный файл ROM. Мы лишь проверяем файлы как текст.
Вне рамок
- изменение Python по умолчанию в pyproject.toml
- запуск PyPy из pytest
- открытие окон pygame
- измерение FPS
- оптимизация рендеринга
Запустить этот урок
uv run pytest tests/chapter_10_performance/test_317_pypy_launchers.py -v