HeadlinesBriefing HeadlinesBriefing.com

Python 3.15 Leistungsbenchmark-Ergebnisse

Hacker News •
×

Es ist wieder Oktober, und das bedeutet, dass es Zeit ist, den neuen Python-Release auszuprobieren (technisch gesehen verwende ich die 3.15.0rc3-Version, die offizielle 3.15-Version steht noch ein paar Tage aus). Wie ich vor einem Jahr bei meinem Python 3.14 Leistungsartikel gemacht habe, teile ich heute einen neuen Lauf meines informellen Python-Benchmarks, bei dem Python 3.15 mit vorhergehenden Interpretern von 3.10 verglichen wird. Wenn Ihnen die Diagramme und Tabellen nicht interessieren und Sie nur meine Analyse lesen möchten, springen Sie bitte zum Schlussabschnitt.

Den Benchmark, den ich "informal" genannt habe, was bedeutet das? Das objektive und universelle Messen der Leistung einer Programmiersprache ist unmöglich. Man kann nur Programme schreiben und ausführen, um eine Messung ihrer Leistung zu erhalten. Andere Programme können ähnliche Leistungsmerkmale zeigen oder auch nicht, es gibt wirklich keine Möglichkeit zu wissen.

Meine Absicht mit diesem Benchmark ist lediglich, ein Gefühl für die Leistungsänderungen über Python-Versionen zu bekommen, aber ich möchte klarstellen, dass ich nicht versuchen möchte, ein umfassendes Leistungsprofil des Python-Interpreters zu erhalten. Für meinen Benchmark führe ich zwei Programme aus, die fibo.py und bubble.py genannt werden, die Sie sich ansehen können. Das sind dieselben Programme, die ich in früheren Ausgaben dieses Benchmarks verwendet habe.

Das erste berechnet Zahlen aus der Fibonacci-Folge, und das zweite sortiert Zahlen mit dem Bubblesort-Algorithmus. Ich habe diese beiden Programme als repräsentativ für zwei Klassen von Algorithmen gewählt. Die Fibonacci-Berechnung erfolgt unter Verwendung von Rekursion, die ich in Python-Interpretern etwas ineffizient gefunden habe.

Andererseits verwendet der Bubblesort nur for-Schleifen, ohne jede Rekursion. Mein Benchmark versucht nicht, andere Arten von Programmen abzudecken. Insbesondere sollte beachtet werden, dass ich I/O-bundigen Code in diesem Benchmark nicht einbeziehe.

Da einige Leistungsverbesserungen in jüngeren Python-Versionen rund um Multithreading gehen, habe ich für jedes Programm auch eine Multithreading-Variante erstellt, sodass ich insgesamt vier verschiedene Tests habe. Die vollständige Testmatrix ist tatsächlich ziemlich komplex, weil ich die vier Programmvarianten unter allen Python-Versionen ausführen muss, sowie die JIT- und free-threading-Alternativen für diejenigen, die diese haben. Ich mag auch unter Py Py laufen, weil dieser Interpreter in früheren Läufen dieses Benchmarks beeindruckende Leistung gezeigt hat.

Und um die Python-Leistung im weiteren Ökosystem einzuordnen, habe ich die beiden Programme auch nach Java Script (Node.js) und Rust portiert. Hier ist die vollständige Testmatrix, mit der ich gearbeitet habe: 2 Testskripte: fibo.py: berechnet Fibonacci-Zahlen, mit Rekursion; bubble.py: sortiert Zahlen mit dem Bubblesort-Algorithmus, ohne Rekursion. 2 Threading-Modi: Single-threaded; 4 parallele Threads. 6 Python-Versionen, plus recent versions of Py Py, Node.js and Rust: CPython 3.10, 3.11, 3.12, 3.13, 3.14, 3.15; Py Py 3.12; Node 26.3; Rust 1.97. 3 Python-Interpreter: Standard; Just-In-Time (JIT): nur für CPython 3.13+; Free-threading (FT): nur für CPython 3.13+. Leser meiner vorherigen Benchmarks erinnern sich vielleicht, dass ich eine zusätzliche Dimension in meiner Testmatrix für Linux vs. mac OS hatte.

Da es in den beiden vorherigen Läufen dieses Benchmarks keine signifikanten Unterschiede zwischen ihnen gab, habe ich in diesem Lauf die mac OS-Tests gestrichen, sodass alle Tests an meinem Linux-Laptop mit Intel Core i5 CPU und Gentoo Linux ausgeführt wurden. Die Methode, die ich verwende, um die Leistung jedes Teilnehmers dieses Benchmarks zu messen, besteht darin, das Testprogramm dreimal auszuführen und die durchschnittliche Dauer der drei zu nehmen. In den Ergebnistabellen, die ich unten teile, zeige ich zudem den Geschwindigkeitsunterschied im Vergleich zur Version 3.15 und wenn es Sinn macht auch den Geschwindigkeitsunterschied im Vergleich zur vorherigen Version eines gegebenen Interpreters.

Für Geschwindigkeitsvergleiche verwende ich ein einfaches Verhältnis, wobei 1x gleiche Geschwindigkeit bedeutet, 0.5x halbe Geschwindigkeit (oder dass es doppelt so lange dauerte)...

Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing