317. Lanzadores de PyPy

Añade lanzadores explícitos de PyPy para la ejecución manual.

Lección 317 de 356 · tests/chapter_10_performance/test_317_pypy_launchers.py

Archivos a crear en la raíz del repositorio

launcher.sh
launcher.cmd

Por qué existe este paso

PyPy puede mejorar el rendimiento del núcleo del emulador porque gran parte del emulador es código Python que se ejecuta en bucles ajustados. En lugar de cambiar pyproject.toml o forzar a todos los estudiantes a usar PyPy por defecto, este paso añade lanzadores manuales explícitos.

Después de crear estos lanzadores, los estudiantes deberían usarlos para experimentos manuales de rendimiento en lugar de lanzar main.py directamente con CPython.

Uso en Linux/macOS

sh launcher.sh

o, si se añadió permiso de ejecución:

chmod +x launcher.sh
./launcher.sh

Uso en el símbolo del sistema de Windows

launcher.cmd

Señal manual esperada

El contador de FPS añadido anteriormente debería mejorar cuando el núcleo del emulador se beneficie de PyPy. Tras la ruta de carga del framebuffer con pygame más rápida, PyPy puede hacer que el emulador funcione más rápido que la velocidad real de NES. Durante el desarrollo del tutorial, la combinación de la ruta de dibujado con pygame más rápida y PyPy alcanzó aproximadamente 90-120 FPS en la ruta manual de la ROM.

El número exacto depende de la máquina y del estado de la ROM, pero la salida de FPS en el terminal es ahora la evidencia con la que comparar:

fps=30.0    # example after faster pygame drawing on CPython
fps=100.0   # example after faster pygame drawing + PyPy launcher

Si los FPS ahora están por encima de la velocidad de NES, eso es una buena evidencia de que el siguiente paso debería añadir ritmo de fotogramas / control de velocidad esperada para que el juego manual no vaya demasiado rápido.

Comando esperado delegado por ambos lanzadores

uv run --python pypy python main.py

Ejemplo en 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

Ejemplo en CMD de Windows

@echo off

REM Run NES with PyPy through uv.
REM Usage:
REM     launcher.cmd

uv run --python pypy python main.py

Regla de test importante

Estos tests no deben ejecutar los lanzadores. Ejecutarlos iniciaría el frontend manual de pygame y requeriría un archivo de ROM local. Solo inspeccionamos los archivos como texto.

Fuera de alcance

  • cambiar el Python por defecto en pyproject.toml
  • lanzar PyPy desde pytest
  • abrir ventanas de pygame
  • medir FPS
  • optimizar el renderizado

Ejecutar esta lección

uv run pytest tests/chapter_10_performance/test_317_pypy_launchers.py -v