Kleiner Geschwindigkeitstest mit Python3, PyPy und GraalPython
Heute habe ich mit Hilfe von Pyenv einen kompakten Performance-Vergleich zwischen (C)Python3, PyPy und GraalPython durchgeführt.
Als Testfall diente das klassische n-Damen-Problem, dessen Lösungsalgorithmus ich als Basis verwendet habe.
Den Quellcode findet man hier: https://github.com/sol-prog/N-Queens-Puzzle
Die Ergebnisse des Test vom 8.4.2021
- CPython (3.9.4): Calculation took 316.97 seconds
- PyPy (3.7-7.3.3): Calculation took 10.14 seconds
- GraalPython (21.0.0): Calculation took 15.75 seconds
Neues Setup
Die Ergebnisse für n = 1 wurden mit der Zeile
python -m timeit -r 50 -n 1 ‘import nqueens; nqueens.main()’erzeugt.
Die Ergebnisse des Test vom 20.7.2025
- CPython:
- 3.13.1: 1 loop, best of 50: 673 msec per loop
- 3.13.5: 1 loop, best of 50: 661 msec per loop
- PyPy:
- 3.10-7.3.17: 1 loops, average of 50: 75.6 +- 2.9 msec per loop (using standard deviation)
- 3.11-7.3.19: 1 loops, average of 50: 74.9 +- 2.89 msec per loop (using standard deviation)
- GraalPython/GraalPy
- GraalPy 3.11.7 (Oracle GraalVM Native 24.1.1):1 loop, best of 50: 24.9 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.1.1): 1 loop, best of 50: 30 msec per loop
- GraalPy 3.11.7 (Oracle GraalVM Native 24.2.1): 1 loop, best of 50: 24.5 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.2.1): 1 loop, best of 50: 28.1 msec per loop
Neues Setup
Die Ergebnisse für n = 5 wurden mit der Zeile
python -m timeit -r 50 -n 1 ‘import nqueens; nqueens.main()’erzeugt.
Die Ergebnisse des Test vom 4.12.2025 (iMac 24.6.0 x86_64 i386)
- CPython:
- Python 3.13.5: 5 loops, best of 50: 656 msec per loop
- Python 3.13.10: 5 loops, best of 50: 647 msec per loop
- Python 3.14.0: 5 loops, best of 50: 665 msec per loop
- Python 3.14.1: 5 loops, best of 50: 701 msec per loop
- PyPy:
- Python 3.11.11 (0253c85bf5f8, Feb 26 2025, 10:43:06) [PyPy 7.3.19 with GCC Apple LLVM 15.0.0 (clang-1500.3.9.4)]: 5 loops, average of 50: 85.7 +- 2.08 msec per loop (using standard deviation)
- Python 3.11.13 (413c9b7f57f5, Jul 03 2025, 18:04:31) [PyPy 7.3.20 with GCC Apple LLVM 16.0.0 (clang-1600.0.26.6)]: 5 loops, average of 50: 87.6 +- 3.06 msec per loop (using standard deviation)
- GraalPy(thon):
- GraalPy 3.11.7 (Oracle GraalVM Native 24.1.1): 5 loops, best of 50: 25.5 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.1.1): 5 loops, best of 50: 33.6 msec per loop
- GraalPy 3.11.7 (Oracle GraalVM Native 24.2.1): 5 loops, best of 50: 24.4 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.2.1): 5 loops, best of 50: 32.2 msec per loop
- GraalPy 3.11.7 (Oracle GraalVM Native 24.2.2): 5 loops, best of 50: 24.4 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.2.2): 5 loops, best of 50: 32.3 msec per loop
- GraalPy 3.12.8 (Oracle GraalVM Native 25.0.1): 5 loops, best of 50: 23.6 msec per loop
- GraalPy 3.12.8 (GraalVM CE Native 25.0.1): 5 loops, best of 50: 29.6 msec per loop
Die Ergebnisse des Test vom 4.12.2025 (MacBookPro 24.6.0 arm64 arm)
- CPython:
- Python 3.13.5: 5 loops, best of 50: 661 msec per loop
- Python 3.13.10: 5 loops, best of 50: 653 msec per loop
- Python 3.14.0: 5 loops, best of 50: 469 msec per loop
- Python 3.14.1: 5 loops, best of 50: 469 msec per loop
- PyPy:
- Python 3.11.11 (0253c85bf5f8, Feb 26 2025, 10:42:49) [PyPy 7.3.19 with GCC Apple LLVM 15.0.0 (clang-1500.3.9.4)]: 5 loops, average of 50: 74.2 +- 0.681 msec per loop (using standard deviation)
- Python 3.11.13 (413c9b7f57f5, Jul 03 2025, 18:04:06) [PyPy 7.3.20 with GCC Apple LLVM 16.0.0 (clang-1600.0.26.6)]: 5 loops, average of 50: 73.3 +- 0.688 msec per loop (using standard deviation)
- GraalPy(thon):
- GraalPy 3.11.7 (Oracle GraalVM Native 24.1.1): 5 loops, best of 50: 24.9 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.1.1): 5 loops, best of 50: 29.1 msec per loop
- GraalPy 3.11.7 (Oracle GraalVM Native 24.2.1): 5 loops, best of 50: 23.6 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.2.1): 5 loops, best of 50: 27.3 msec per loop
- GraalPy 3.11.7 (Oracle GraalVM Native 24.2.2): 5 loops, best of 50: 23.6 msec per loop
- GraalPy 3.11.7 (GraalVM CE Native 24.2.2): 5 loops, best of 50: 27.2 msec per loop
- GraalPy 3.12.8 (Oracle GraalVM Native 25.0.1): 5 loops, best of 50: 23.6 msec per loop
- GraalPy 3.12.8 (GraalVM CE Native 25.0.1): 5 loops, best of 50: 24.9 msec per loop