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.cmdPor 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.sho, si se añadió permiso de ejecución:
chmod +x launcher.sh
./launcher.shUso en el símbolo del sistema de Windows
launcher.cmdSeñ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 launcherSi 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.pyEjemplo 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.pyEjemplo en CMD de Windows
@echo off
REM Run NES with PyPy through uv.
REM Usage:
REM launcher.cmd
uv run --python pypy python main.pyRegla 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