How Fast is Python 3.15?
🇬🇧 English
It's October once again, and that means it is time to take the new release of Python for a spin (technically, it is the 3.15.0rc3 release that I'm using, the official 3.15 release is still a few days out). As I did with my Python 3.14 performance article of a year ago, today I'm sharing a new run of my informal Python benchmark, comparing Python 3.15 against previous interpreters all the way back to 3.10. If you are not interested in the charts and the tables and just want to read my analysis, feel free to jump to the conclusions section at the end.
The benchmark I just called my benchmark "informal". What does that mean? Getting an objective and universal measure of the performance of a programming language is impossible. All you can do is write some programs and run them to get a measure of their performance.
Other programs may show similar performance characteristics or they may not, there is really no way to know. My intention with this benchmark is just to get a feel for the performance changes across versions of Python, but I want to make it clear that I'm not trying to obtain a comprehensive performance profile of the Python interpreter. For my benchmark I will be running two programs called fibo.py and bubble.py, which you can inspect if you like.
These are the same programs I used in past editions of this benchmark. The first calculates numbers from the Fibonacci sequence, and the second sorts numbers using the bubble sort algorithm. I've chosen these two programs as representative of two classes of algorithms.
The Fibonacci calculation is done using recursion, which I have found to be somewhat inefficient in Python interpreters. On the other side, the bubble sort only uses for-loops, without any recursion. There are other types of programs that my benchmark does not attempt to cover.
In particular, note that I'm not including I/O bound code in this benchmark. Because some of the performance improvements in recent Python versions revolve around multi-threading, I also created a multi-threaded variation for each program, so in total I have four different tests. The testing matrix The complete testing matrix is actually fairly complex, because I have to run the four program variations under all the Python versions, plus the JIT and free-threading alternatives for those that have them.
I like to run the tests under Py Py as well, because this interpreter has shown impressive performance in past runs of this benchmark. And to place Python performance within the wider ecosystem, I've also ported the two programs to Java Script (Node.js) and Rust. Here is the full test matrix that I've worked with: 2 test scripts: fibo.py: calculates Fibonacci numbers, with recursion; bubble.py: sorts a list of randomly generated numbers, without recursion. 2 threading modes: Single-threaded; 4 parallel threads. 6 Python versions, 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 interpreters: Standard; Just-In-Time (JIT): only for CPython 3.13+; Free-threading (FT): only for CPython 3.13+.
Readers of my previous benchmarks may recall that I had an additional dimension in my matrix for Linux vs. mac OS. Given that there were no significant differences between them in the two previous runs of the benchmark, I've decided to drop the mac OS tests this time around, so all tests were executed on my Linux laptop, which has an Intel Core i5 CPU and runs Gentoo Linux. The method I'm using to measure the performance of each participant in this benchmark is to run the test program three times and take the average duration of the three.
In the tables of results that I share below I also show the speed difference versus the 3.15 version, and when it makes sense also the speed difference versus the previous version of a given interpreter. For speed comparisons I'm using a simple ratio, where 1x means same speed, 0.5x means half speed (or that it took twice the time to run), 2x means twice as fast.
🇸🇦 العربية
نتائج أداء Python 3.15
حلول أكتوبر مرة أخرى، وهذا يعني أنه من الوقت لتجربة الإصدار الجديد من Python (تقنيًا، أنا أستخدم إصدار 3.15.0rc3، والإصدار الرسمي 3.15 سيصدر بعد أيام قليلة). تمامًا كما فعلتُ مع مقالي Python 3.14 للأداء قبل عام، أنا اليوم أشارك جولة جديدة من benchmark غير الرسمي لـ Python، أقارن فيه Python 3.15 بالمفسرات السابقة التي تعود إلى 3.10. إذا لم تكن مهتمًا بالجداول والرسوم البيانية وتريد فقط قراءة تحليلي، فيمكنك القفز إلى قسم الاستنتاجات في نهاية المقال. benchmark الذي أطلقته "غير رسمي" يعني ماذا؟ من المستحيل قياس أداء لغة برمجة بشكل موضوعي وشامل. كل ما يمكنك فعله هو كتابة بعض البرامج وتشغيلها للحصول على قياس لأداءها. برامج أخرى قد تظهر خصائص أداء مشابهة أو قد لا، حقًا لا يوجد way to know. هدفي من هذا benchmark هو فقط الشعور بتغيرات الأداء across Python الإصدارات، لكنني أريد أن أكون واضحًا أنني لا أحاول الحصول على ملف تعريف أداء شامل لمفسر Python. بالنسبة لـ benchmark الخاص بي، سأقوم بتشغيل برنامجين يُدعى fibo.py و bubble.py، يمكنك فحصهما إذا أحببت. الأول calculates أرقام تسلسل فيبوناتشي، والثاني يقوم بترتيب الأرقام باستخدام خوارزمية الفقاعة. لقد اخترت هذين البرنامجين كممثلين لفئتين من الخوارزميات. عملية حساب فيبوناتشي تتم باستخدام التكرار، الذي وجدته somewhat غير كفاءة في مفسرات Python. من ناحية أخرى، الفقاعة sort تستخدم فقط for-loops، بدون أي تكرار. benchmark الخاص بي لا يحاول تغطية أنواع أخرى من البرامج. وبالتحديد، لاحظ أنني لا أشمل كود I/O المحدود في هذا benchmark. لأن بعض التحسينات في الأداء في الإصدارات الأخيرة من Python تدور حول multithreading، فقد قمت أيضًا بإنشاء متغير multithreaded لكل برنامج، لذا فإجمالي أربعة اختبارات. матриx الاختبار الكامل في الواقع، матриx الاختبار معقد جدًا، لأنني يجب أن أجري الاختبارات الأربع المتغيرة تحت جميع إصدارات Python، بالإضافة إلى بدائل JIT و free-threading لتلك التي تمتلكها. أحب أن أجري الاختبارات تحت Py Py أيضًا، لأن هذا المفسر أظهر أداءً مثيرًا للإعجاب في عمليات benchmark السابقة لهذا المقال. وللوضع أداء Python within the wider ecosystem، قمت أيضًا بنقل البرنامجين إلى Java Script (Node.js) و Rust. هنا matrix الاختبار الكامل الذي عملتُ معه: 2スクリプト الاختبار: fibo.py: يحسب أرقام تسلسل فيبوناتشي، مع التكرار؛ bubble.py: يقوم بترتيب قائمة من الأرقام العشوائية المُنشأة، بدون تكرار. 2 modes de thread: Single-threaded; 4 threads متوازية. 6 إصدارات من Python، بالإضافة إلى الإصدارات الأخيرة من Py Py, Node.js و 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 interpreters Python: Standard; Just-In-Time (JIT): فقط لـ CPython 3.13+; Free-threading (FT): فقط لـ CPython 3.13+. قراء benchmark السابقين للمقال قد يتذكرون أنني كان لدي بعد إضافي في матриx الاختبار لـ Linux vs. mac OS. Given أنه لم تكن هناك فروق ذات دلالة إحصائية بينهما في مرتين السابقتين من benchmark، فقد قررت إلغاء اختبارات mac OS هذه المرة، لذا تم إجراء جميع الاختبارات على لابتوب Linux الخاص بي الذي يعمل بنظام Gentoo Linux ومعالج Intel Core i5. الطريقة التي أستخدمها لقياس أداء كل مشارك في هذا benchmark هي تشغيل برنامج الاختبار ثلاث مرات وأخذ متوسط مدة الثلاث. في جداول النتائج التي أشاركها أدناه، أنا أيضًا أظهر الفارق في السرعة مقابل إصدار 3.15، وعندما يكون ذلك منطقيًا أيضًا الفارق في السرعة مقابل إصدار سابقة من given interpreter. للمقارنة السرعة، أستخدم نسبة بسيطة، حيث 1x يعني نفس السرعة، 0.5x يعني نصف السرعة (أو أن الوقت المستغرق كان ضعفين)...
ما هو الهدف الرئيسي من benchmark Python 3.15 المذكور في المقال؟
الهدف الرئيسي هو الشعور بتغيرات الأداء across إصدارات Python، وليس الحصول على ملف تعريف أداء شامل لمفسر interpreter.
🇧🇩 বাংলা
Python 3.15 পারফরম্যান্স বেঞ্চমার্ক ফলাফল
একবার फिर অক্টোবর আসে, এবং এর মানে হলো নতুন Python রিলিজের জন্য পরীক্ষা করা (তকনিকালভাবে, আমি 3.15.0rc3 রিলিজ ব্যবহার করছি, অফিসিয়াল 3.15 রিলিজ কিছু দিন পর আসবে)। পिछले বছর Python 3.14 পারফরম্যান্স লেখার মতো, আজ আমার নন-ফর্মাল Python benchmark সে শেয়ার করছি, যেখানে Python 3.15 তুলনা করা হচ্ছে 3.10 পর্যন্ত ফিরে যাওয়া পুরনো ইন্টারপ্রেটার সাথে। যদি আপনি চার্ট এবং টেবিলে রুচি না रखে এবং শুধু আমার বিশ্লেষণ পড়তে চান, তবে শেষে নिष्कসানের সেকশনে যেতে পারেন। আমি যে benchmark কে "নন-ফর্মাল" বলছি, তাতে কি মানে? প্রোগ্রামিং ভাষার জন্য একটি সঠিক এবং বিশ্বব্যাপী পারফরম্যান্স মাপ অসম্ভব। আপনি কেবল কিছু প্রোগ্রাম লিখতে পারেন এবং运行 করতে পারেন তাদের পারফরম্যান্স মাপ পেতে। অন্য প্রোগ্রামের পারফরম্যান্স বৈশিষ্ট্য সমান দেখতে পারে বা না দেখতে পারে, সত্যিই কোনো জানে না। আমার এই benchmark-এর উদ্দেশ্য শুধু Pythonের বিভিন্ন সংস্করণের মধ্যে পারফরম্যান্স পরিবর্তন অনুভব করা, কিন্তু আমি স্পষ্ট করতে চাই যে আমি Python ইন্টারপ্রেটার সম্পূর্ণ পারফরম্যান্স প্রফাইল অর্জার চেষ্টা করছি না। আমার benchmark জন্য, আমি fibo.py এবং bubble.py নামে দুটি প্রোগ্রাম চালাব, যেগুলো দেখতে পারেন। এইগুলো পिछले éditions of this benchmark-তে ব্যবহার করা হয়েছিল। প্রথম Fibonacci অনুক্রমের সংখ্যা গণনা করে, এবং দ্বিতীয় বাবল sor্ট ব্যবহার করে সংখ্যার তালিকা সাজায়। আমি এই দুটি প্রোগ্রাম দুটি অ্যালগরিদমের শ্রেণির প্রতিনিধি হিসেবে নির্বাচন করেছি। Fibonacci গণনা ব্যবহার করে récursion, যা আমি পাইথন ইন্টারপ্রেটারে কিছুটা অক্ষম পেয়েছি। অন্যদিকে, bubble sort শুধু for-loops ব্যবহার করে, বinai কোন récursion। আমার benchmark বিভিন্ন প্রকারের প্রোগ্রাম কভার করার চেষ্টা করে না। বিশেষ করে, অনুহার করুন যে আমি এই benchmark-তে I/O বন্ধিত কোড অন্তর্ভুক্ত করছি না। কারণ récents Python সংস্করণে কিছু পারফরম্যান্স উন্নয়ন multi-threading-around ঘুরে পড়ে, তাই আমার প্রতিটি প্রোগ্রামের জন্য একটি multi-threaded বিবिधতা তৈরি করতে পড়েছি, তাই মোট four別개의 পরীক্ষা। পূর্ণ পরীক্ষা маট্রিক্স বাস্তবায়নটা খুব জটিল, কারণ আমি সব পাইথন সংস্করণের নিচে চার প্রোগ্রাম ভেরিয়েশন চালাতে হব, साथ ही JIT এবং free-threading选项 আছে যে। আমি Py Py-তে পরীক্ষা চালাতে পছন্দ করি, কারণ এই ইন্টারপ্রেটার পिछले दौर benchmark-তে প্রভাবশালী পারফরম্যান্স দেখিয়েছে। এবং Python পারফরম্যান্সকে বড় প্যারিস্টেমের মধ্যে স্থাপন করতে, আমি Java Script (Node.js) এবং Rust-তে দুটি প্রোগ্রাম পোর্ট করতে পড়েছি। আমার সম্পূর্ণ test matrix যা কাজ করছি: 2 টেস্ট স্ক্রিপ্ট: fibo.py: récursion ব্যবহার করে Fibonacci সংখ্যা গণনা; bubble.py: récursion ছাড়া র্যান্ডম সংখ্যার তালিকা সাজায়। 2 থ্রেডিং মোড: সingle-threaded; 4 সমান্তরাল থ্রেড। 6 Python সংস্করণ, साथে Py Py, Node.js এবং Rust-এর récents সংস্করণ: 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 ইন্টারপ্রেটার: স্ট্যান্ডার্ড; Just-In-Time (JIT): শুধু CPython 3.13+; Free-threading (FT): শুধু CPython 3.13+. আমার পূর্বের benchmark-তে পাঠক মনে রাখতে পারেন যে আমার matrix-তে Linux বনvs. mac OS-র জন্য একটি অতিরিক্ত आयাম ছিল। Given যে দুটি previous benchmark運行-তে তাদের মধ্যে কোনো উল্লেখযোগ্য পার্থক্য ছিল না, তাই এইবার mac OS test ছেড়ে দিয়েছি, তাই সব test আমার Gentoo Linux রান করলা Linux ল্যাপটপ-তে, যা Intel Core i5 CPU-তে এবং Gentoo Linux রান করছে। আমার প্রতিটি অংশগ্রহণকারী পারফরম্যান্স মাপের জন্য, আমি test প্রোগ্রামটি তিনবার চালাব এবং তিনবার চালানোর গড় সময় নেব। আমি নিচে শেয়ার করছি ফলাফল টেবিলে, আমি 3.15 সংস্করণের সাথে গতি পার্থকও দেখাব, এবং যখন বুঝতে পারে তখন একটি दिए गए ইন্টারপ্রেটার পिछले সংস্করণের সাথে গতি পার্থকও দেখাব। গতি তুলনা জন্য, আমি একটি সহজ অনুপাত ব্যবহার করছি, যেখানে 1x সমান গতি का মানে, 0.5x का মানে অর্ধ গতি (অথবা যে इसे সম্পূর্ণ হওয়ায় দ্বিগুণ সময় লাগে)...
Python 3.15 benchmark-এর মূল লক্ষ্য কী?
মূল লক্ষ্য Pythonের বিভিন্ন সংস্করণের মধ্যে পারফরম্যান্স পরিবর্তন অনুভব করা, না कि Python ইন্টারপ্রেটার সম্পূর্ণ পারফরম্যান্স প্রফাইল অর্জন করা।
🇩🇪 Deutsch
Python 3.15 Leistungsbenchmark-Ergebnisse
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)...
Was ist das Hauptziel des in dem Artikel beschriebenen Python 3.15 Benchmarks?
Hauptziel ist es, ein Gefühl für die Leistungsänderungen über Python-Versionen zu bekommen, nicht ein umfassendes Leistungsprofil des Interpreters zu erhalten.
🇪🇸 Español
Resultados de rendimiento de Python 3.15
Cada octubre, toca darle una vuelta al nuevo lanzamiento de Python (técnicamente, estoy usando la versión 3.15.0rc3, la versión oficial 3.15 aún falta unos días). Al igual que hice con mi artículo de rendimiento de Python 3.14 hace un año, hoy comparto una nueva ejecución de mi benchmark informal, comparando Python 3.15 con intérpretes anteriores que van desde la 3.10. Si no te interesan las tablas y los gráficos y solo quieres leer mi análisis, no dudes en saltar a la sección de conclusiones al final.
El benchmark que llamé "informal" ¿qué significa eso? Objetiva y universalmente medir编程语言的性能是不可能的。 todo lo que puedes hacer es escribir algunos programas y ejecutarlos para obtener una medida de su rendimiento. Otros programas pueden mostrar características de rendimiento similares o pueden no hacerlo, realmente no hay manera de saberlo. Mi intención con este benchmark es solo sentir los cambios de rendimiento en las versiones de Python, pero quiero dejar claro que no estoy intentando获得一个全面的性能概况 Python 解释器。Para mi benchmark ejecutaré dos programas llamados fibo.py y bubble.py, que puedes inspeccionar si te gusta.
Estos son los mismos programas que utilicé en ediciones anteriores de este benchmark. El primero calcula números de la secuencia de Fibonacci, y el segundo ordena números usando el algoritmo de burbuja. He elegido estos dos programas como代表性 的两类算法。El cálculo de Fibonacci se hace usando recursión, que he encontrado algo ineficiente en los intérpretes de Python.
Por otro lado, el bubble sort solo usa bucles for, sin ninguna recursión. Hay otros tipos de programas que mi benchmark no intenta cubrir. En particular, ten en cuenta que no incluyo código I/O limitado en este benchmark.
Porque algunas mejoras de rendimiento en versiones recientes de Python giran en torno al multihilo, también creé una variación multihilo para cada programa, por lo que en total tengo cuatro pruebas diferentes. La matriz de pruebas La matriz de pruebas completa es en realidad bastante compleja, porque tengo que ejecutar las cuatro variaciones de programa bajo todas las versiones de Python, más las alternativas JIT y free-threading para aquellas que las tienen. Me gusta ejecutar las pruebas bajo Py Py también, porque este intérprete en ejecuciones anteriores de este benchmark ha mostrado un rendimiento impresionante.
Y para situar el rendimiento de Python dentro del ecosistema más amplio, también he portado los dos programas a Java Script (Node.js) y Rust. Aquí está la matriz de pruebas completa con la que he trabajado: 2 scripts de prueba: fibo.py: calcula números de Fibonacci, con recursión; bubble.py: ordena una lista de números aleatorios generados, sin recursión. 2 modos de hilo: Single-threaded; 4 hilos paralelos. 6 versiones de Python, más versiones recientes de Py Py, Node.js y 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 intérpretes de Python: Estándar; Just-In-Time (JIT): solo para CPython 3.13+; Free-threading (FT): solo para CPython 3.13+. Los lectores de mis benchmarks anteriores pueden recordar que tenía una dimensión adicional en mi matriz para Linux vs. mac OS.
Dado que en las dos anteriores ejecuciones del benchmark no hubo diferencias significativas entre ellas, he decidido descartar las pruebas de mac OS esta vez, por lo que todos los tests se ejecutaron en mi laptop con Linux, que tiene un procesador Intel Core i5 y ejecuta Gentoo Linux. El método que uso para medir每个参与者的性能是运行测试程序三次并取三次运行时间的平均值。在下面共享的结果表中,我也展示了与 3.15 版本的速度差异,并且 cuando tiene sentido también la velocidad差异 versus la versión anterior de un dado intérprete. Para comparaciones de velocidad, uso una razón simple, donde 1x significa misma velocidad, 0.5x significa mitad de velocidad (o que tomó el doble de tiempo para...
Cuál es el objetivo principal del benchmark de Python 3.15 descrito en el artículo?
El objetivo principal es sentir los cambios de rendimiento en las versiones de Python, no obtener una visión completa del rendimiento del intérprete。
🇫🇷 Français
Résultats de performance Python 3.15
C'est octobre une fois de plus, ce qui signifie qu'il est temps de tester la nouvelle version de Python (techniquement, j'utilise la version 3.15.0rc3, la version officielle 3.15 n'est pas encore disponible). Comme j'ai fait avec mon article de performance Python 3.14 il y a un an, je partage aujourd'hui une nouvelle série de mon benchmark informel, comparant Python 3.15 aux interprètes précédents allant jusqu'à la 3.10. Si vous n'êtes pas intéressé par les graphiques et les tableaux et que vous voulez juste lire mon analyse, n'hésitez pas à sauter à la section de conclusions à la fin.
Le benchmark que j'ai appelé "informal" signifie quoi ? Il est impossible d'obtenir une mesure objective et universelle des performances d'un langage de programmation. Tout ce que vous pouvez faire, c'est écrire quelques programmes et les exécuter pour obtenir une mesure de leurs performances. D'autres programmes peuvent montrer des caractéristiques de performance similaires ou non, il n'y a vraiment aucun moyen de le savoir.
Mon intention avec ce benchmark n'est que de ressentir les changements de performance across les versions de Python, mais je veux laisser clair que je n'essaie pas d'obtenir un profil de performance complet de l'interpréteur Python. Pour mon benchmark, je vais exécuter deux programmes appelés fibo.py et bubble.py, que vous pouvez inspecter si vous le souhaitez. Ce sont les mêmes programmes que j'ai utilisés dans les éditions précédentes de ce benchmark.
Le premier calcule des nombres de la suite de Fibonacci, et le second trie des nombres using the bubble sort algorithm. J'ai choisi ces deux programmes comme représentatifs de deux classes d'algorithmes. Le calcul de Fibonacci est fait using la récursion, que j'ai trouvé quelque peu inefficace dans les interprètes Python.
D'autre part, le bubble sort n'utilise que des boucles for, sans aucune récursion. Il y a d'autres types de programmes que mon benchmark n'essaie pas de couvrir. En particulier, notez que je n'inclus pas de code I/O limité dans ce benchmark.
Parce que certaines améliorations de performance dans les versions récentes de Python tournent autour du multithreading, j'ai également créé une variation multithreadée pour chaque programme, donc au total j'ai quatre tests différents. La matrice de tests complète est en réalité assez complexe, car je dois exécuter les quatre variations de programme sous toutes les versions de Python, ainsi que les alternatives JIT et free-threading pour celles qui les ont. J'aime exécuter les tests sous Py Py également, car cet interpréteur a montré des performances impressionnantes dans les exécutions précédentes de ce benchmark.
Et pour situer la performance de Python au sein de l'écosystème plus large, j'ai également porté les deux programmes vers Java Script (Node.js) et Rust. Voici la matrice de tests complète avec laquelle j'ai travaillé : 2 scripts de test : fibo.py : calcule des nombres de la suite de Fibonacci, avec récursion ; bubble.py : trie une liste de nombres générés au hasard, sans récursion. 2 modes de thread : Single-threaded ; 4 threads parallèles. 6 versions de Python, plus des versions récentes de Py Py, Node.js et 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 interprètes Python : Standard ; Just-In-Time (JIT) : uniquement pour CPython 3.13+ ; Free-threading (FT) : uniquement pour CPython 3.13+. Les lecteurs de mes benchmarks précédents peuvent se rappeler que j'avais une dimension supplémentaire dans ma matrice pour Linux vs. mac OS.
Compte tenu du fait qu'il n'y avait pas de différences significatives entre eux dans les deux précédentes exécutions du benchmark, j'ai décidé d'abandonner les tests mac OS cette fois-ci, donc tous les tests ont été exécutés sur mon laptop sous Linux, qui possède un processeur Intel Core i5 et fait tourner Gentoo Linux. La méthode que j'utilise pour mesurer la performance de chaque participant à ce benchmark consiste à exécuter le programme de test trois fois et à prendre la durée moyenne des trois. Dans les tableaux de résultats que je partage ci-dessous, j'affiche également la différence de vitesse par rapport à la version 3.15, et lorsque cela a du sens aussi la différence de vitesse par rapport à la version précédente d'un interpréteur donné.
Pour les comparaisons de vitesse, j'utilise un ratio simple, où 1x signifie même vitesse, 0.5x signifie moitié de vitesse (ou qu'il a fallu deux fois plus de temps pour...
Quel est l'objectif principal du benchmark Python 3.15 décrit dans l'article ?
L'objectif principal est de ressentir les changements de performance across les versions de Python, et non d'obtenir un profil de performance complet de l'interpréteur.
🇮🇳 हिन्दी
Python 3.15 प्रदर्शन बेंचमार्क परिणाम
एक बार फिर अक्टूबर आ गया है, और इसका मतलब है कि नए Python रिलीज़ को आज़माने का समय आ गया है (तकनीकी रूप से, मैं 3.15.0rc3 रिलीज़ का उपयोग कर रहा हूं, आधिकारिक 3.15 रिलीज़ कुछ दिनों बाद आएगी)। पिछले साल Python 3.14 के प्रदर्शन लेख की तरह, आज मैं मेरा नॉन-फॉर्मल Python benchmark साझा कर रहा हूं, जिसमें Python 3.15 की तुलना 3.10 तक वापस जाने वाले पुराने इंटरप्रेटर से की गई है। अगर आपको चार्ट और तालिकाओं में दिलचस्पी नहीं है और बस मेरा विश्लेषण पढ़ना चाहते हैं, तो अंत में निष्कर्षों वाले अनुभाग में कूद सकते हैं। जिसे मैं मेरा benchmark "नॉन-फॉर्मल" कह रहा हूं, उसका क्या मतलब है? किसी प्रोग्रामिंग भाषा की वस्तुनिष्ठ और सार्वभौमिक प्रदर्शन माप असंभव है। आप बस कुछ प्रोग्राम लिख सकते हैं और उन्हें चलाकर उनकी प्रदर्शन माप प्राप्त कर सकते हैं। अन्य प्रोग्राम समान प्रदर्शन विशेषताएं दिखा सकते हैं या वे ऐसा नहीं कर सकते, वास्तव में कोई नहीं जानता। मेरा इस benchmark के साथ इरादा सिर्फ Python के विभिन्न संस्करणों के बीच प्रदर्शन परिवर्तन का अहसास करना है, लेकिन मुझे स्पष्ट करना चाहिए कि मैं Python इंटरप्रेटर का व्यापक प्रदर्शन प्रोफाइल प्राप्त करने का प्रयास नहीं कर रहा हूं। अपने benchmark के लिए, मैं fibo.py और bubble.py नामक दो कार्यक्रम चलाऊंगा, जिन्हें आप देख सकते हैं। ये वही कार्यक्रम हैं जिनका उपयोग मैं इस benchmark के पिछले संस्करणों में किया था। पहला Fibonacci अनुक्रम के संख्या की गणना करता है, और दूसरा बबल सॉर्ट एल्गोरिदम का उपयोग करके संख्या की सूची को सॉर्ट करता है। मुझे ये दो कार्यक्रम दो वर्ग के एल्गोरिदम के प्रतिनिधि के रूप में चुना है। Fibonacci की गणना पुनरावृत्ति (recursion) द्वारा की जाती है, जिसे मुझे Python इंटरप्रेटर में कुछ हद तक अक्षम पाया है। दूसरी ओर, bubble sort केवल for-loops का उपयोग करता है, बिना किसी पुनरावृत्ति के। मेरा benchmark विभिन्न प्रकार के कार्यक्रमों को कवर करने का प्रयास नहीं करता है। विशेष रूप से, ध्यान दें कि मैं इस benchmark में I/O बंधित कोड शामिल नहीं कर रहा हूं। क्योंकि हाल के Python संस्करणों में कुछ प्रदर्शन में सुधार multi-threading के इर्द-गिर्द घूमते हैं, इसलिए मुझे प्रत्येक कार्यक्रम के लिए एक multi-threaded विविधता भी बनानी पड़ी, ताकि कुल मिलाकर चार अलग-अलग परीक्षण हों। पूरी परीक्षण मैट्रिक्स वास्तव में जटिल है, क्योंकि मुझे सभी Python संस्करणों के तहत चार कार्यक्रम विविधताओं को चलाना है, साथ ही उनमें से जिनमें JIT और free-threading विकल्प हैं। मुझे Py Py के नीचे परीक्षण करना पसंद है, क्योंकि इस इंटरप्रेटर ने पिछले दौर के इस benchmark में प्रभावशाली प्रदर्शन दिखाया है। और Python प्रदर्शन को व्यापक रूप से पारिस्थितिकी तंत्र में स्थान देने के लिए, मुझे Java Script (Node.js) और Rust में दो कार्यक्रमों का पोर्ट करना पड़ा है। यहाँ मेरा पूरा टेस्ट मैट्रिक्स है जिसे मैं काम कर रहा हूं: 2 टेस्ट स्क्रिप्ट: fibo.py: पुनरावृत्ति द्वारा Fibonacci संख्या की गणना; bubble.py: पुनरावृत्ति के बिना यादृच्छिक संख्या की सूची को सॉर्ट करना। 2 थ्रेडिंग मोड: एकल थ्रेड; 4 समानांतर थ्रेड। 6 Python संस्करण, साथ ही Py Py, Node.js और 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 इंटरप्रेटर: मानक; Just-In-Time (JIT): केवल CPython 3.13+; Free-threading (FT): केवल CPython 3.13+. मेरे पिछले benchmark के पाठक याद कर सकते हैं कि मेरा मैट्रिक्स में Linux बनाम mac OS के लिए एक अतिरिक्त आयाम था। Given कि दोनों पिछले benchmark चलाने में उनके बीच कोई महत्वपूर्ण अंतर नहीं था, इसलिए इस बार mac OS के test को छोड़ दिया है, इसलिए सभी test मुझे Gentoo Linux चलाने वाले Intel Core i5 CPU के साथ मेरा Linux लैपटॉप पर किए गए। मुझे प्रत्येक प्रतिभागी की प्रदर्शन मापने के लिए test कार्यक्रम को तीन बार चलाना है और तीन चलाने के औसत अवधि लेना है। मैं नीचे साझा कर रहा हूं परिणाम तालिकाओं में, मुझे 3.15 संस्करण के साथ गति अंतर भी दिखाया गया है, और जब समझ में आता है तो एक दिए गए इंटरप्रेटर की पिछली संस्कृति के साथ गति अंतर भी दिखाया गया है। गति तुलना के लिए, मैं एक सरल अनुपात का उपयोग कर रहा हूं, जहां 1x समान गति का मतलब है, 0.5x का मतलब आधी गति (या कि इसे पूरा होने में दोगुना समय लगा)...
Python 3.15 benchmark का मुख्य लक्ष्य क्या है?
मुख्य लक्ष्य Python के विभिन्न संस्करणों के बीच प्रदर्शन परिवर्तन का अहसास करना है, न कि Python इंटरप्रेटर का व्यापक प्रदर्शन प्रोफाइल प्राप्त करना।
🇮🇩 Bahasa Indonesia
Hasil Benchmark Performa Python 3.15
Oktober sekali lagi, berarti saat mencoba rilis Python baru (teknis, saya menggunakan rilis 3.15.0rc3, rilis resmi 3.15 masih beberapa hari lagi). Seperti yang saya lakukan dengan artikel performa Python 3.14 tahun lalu, hari ini saya berbagi pengalaman baru dari benchmark Python informal saya, membandingkan Python 3.15 dengan interpreter lama dari 3.10. Jika Anda tidak tertarik dengan grafik dan tabel dan hanya ingin membaca analisis saya, silakan lompat ke bagian kesimpulan di akhir.
Benchmark yang saya sebut "non-formal" artinya? Mengukur performa bahasa pemrograman secara objektif dan universal tidak mungkin. Yang bisa Anda lakukan hanyalah menulis beberapa program dan menjalankannya untuk mendapatkan ukuran performanya. Program lain mungkin menunjukkan karakteristik performa yang mirip, atau mungkin tidak, benar-benar tidak ada cara mengetahui.
Niat saya dengan benchmark ini hanya untuk merasakan perubahan performa di berbagai versi Python, tetapi ingin saya jelaskan bahwa saya tidak mencoba mendapatkan profil performa yang komprehensif dari interpreter Python. Untuk benchmark saya, saya akan menjalankan dua program bernama fibo.py dan bubble.py, yang bisa Anda inspeksi jika suka. Ini adalah program yang sama yang saya gunakan dalam edisi benchmark sebelumnya.
Pertama menghitung angka dari urutan Fibonacci, dan kedua mengurutkan angka menggunakan algoritma bubble sort. Saya memilih program ini sebagai representatif dari dua kelas algoritma. Perhitungan Fibonacci dilakukan menggunakan rekursi, yang saya temukan agak tidak efisien di interpreter Python.
Sisi lain, bubble sort hanya menggunakan for-loop, tanpa rekursi. Benchmark saya tidak mencoba mencakup jenis program lain. Khususnya, perhatikan bahwa saya tidak mencakup kode I/O terbatas dalam benchmark ini.
Karena beberapa peningkatan performa di versi Python terbaru berputar di sekitar multithreading, saya juga membuat variasi multithreading untuk setiap program, sehingga total saya memiliki empat uji berbeda. Lengkap matrix uji sebenarnya cukup kompleks, karena saya harus menjalankan empat variasi program di bawah semua versi Python, serta alternatif JIT dan free-threading untuk yang memiliki. Saya suka menjalankan test di Py Py juga, karena interpreter ini di running benchmark sebelumnya ini menunjukkan performa yang impresif.
Dan untuk menempatkan performa Python dalam ekosistem yang lebih luas, saya juga mentranslasikan dua program ini ke Java Script (Node.js) dan Rust. Ini adalah matrix uji lengkap yang saya kerjakan: 2 skrip uji: fibo.py: menghitung angka Fibonacci, dengan rekursi; bubble.py: mengurutkan daftar angka acak yang dihasilkan, tanpa rekursi. 2 mode threading: Single-threaded; 4 paralel thread. 6 versi Python, plus terbaru Py Py, Node.js dan 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: Standar; Just-In-Time (JIT): hanya untuk CPython 3.13+; Free-threading (FT): hanya untuk CPython 3.13+. Bacaan benchmark sebelumnya saya mungkiningat bahwa saya memiliki dimensi tambahan di matrix uji untuk Linux vs. mac OS.
Given bahwa dua benchmark sebelumnya tidak ada perbedaan signifikan di antara keduanya, saya memutuskan untuk membuang test mac OS kali ini, sehingga semua test dijalankan di Linux laptop saya yang menjalankan Gentoo Linux dan CPU Intel Core i5. Metode yang saya gunakan untuk mengukur performa setiap peserta benchmark ini adalah menjalankan test program tiga kali dan mengambil rata-rata durasi tiga. Di tabel hasil yang saya bagikan di bawah ini, saya juga menunjukkan perbedaan kecepatan versus versi 3.15, dan ketika itu masuk akal juga menunjukkan perbedaan kecepatan versus versi sebelumnya dari interpreter yang diberikan.
Untuk perbandingan kecepatan, saya menggunakan perbandingan sederhana, di mana 1x berarti kecepatan yang sama, 0.5x berarti setengah kecepatan (atau bahwa waktu yang dibutuhkan menjadi dua kali lipat)...
Apa tujuan utama benchmark Python 3.15 yang dijelaskan dalam artikel?
Tujuan utamanya adalah merasakan perubahan performa di berbagai versi Python, bukan mendapatkan profil performa yang komprehensif dari interpreter Python.
🇯🇵 日本語
Python 3.15 パフォーマンスベンチマーク結果
10月となりましたが、新しい Python のリリースを試す時間です(技術的には、3.15.0rc3 を使用していますが、正式な 3.15 リリースは数日後に公開されます)。去年の Python 3.14 パフォーマンス記事同様、本日は Python 3.15 と 3.10 まで遡る過去のインタプリタとの非公式ベンチマークの新しい実行を共有します。チャートやテーブルに興味がない場合は、記事末尾の結論セクションにジャンプしてください。私が呼んでいるベンチマークが "non-formal" ということはどういう意味ですか? プログラミング言語の客観的かつ普遍的なパフォーマンス測定は不可能です。できることはプログラムを書いて実行し、そのパフォーマンスを測定することだけです。他のプログラムは似たようなパフォーマンス特性を示すかもしれませんが、そうでないかもしれません、本当にわからないでしょう。このベンチマークの意図は、Python のバージョン間のパフォーマンス変化を感じ取ることだけですが、Python インタプリタの包括的なパフォーマンスプロファイルを得ようとしているのではありません。私のベンチマークでは、fibo.py および bubble.py という名前の 2 つのプログラムを実行します。興味があれば確認できます。これらは過去のこのベンチマークで使用した同じプログラムです。1 つ目はフィボナッチ数列の数字を計算し、2 つ目はバブルソート アルゴリズムを使用して数字をソートします。これら 2 つのプログラムをアルゴリズムの 2 つのクラスの代表的なものとして選択しました。フィボナッチ計算は再帰を使用して行われており、Python インタプリタでは somewhat 非効率であると見つかりました。一方、バブルソートは for-loop を使用し、再帰は含まれていません。私のベンチマークはカバーしようとしていない他の種類のプログラムがあります。特に、I/O bound コードはこのベンチマークに含めていません。最近の Python バージョンのパフォーマンス改善はマルチスレッドに関連しているため、各プログラムについてマルチスレッドの変種も作成しました。合計で 4 つの異なるテストがあります。完全なテストマトリックスは実際にはかなり複雑です。なぜなら、すべての Python バージョンの下で 4 つのプログラムバリエーションを実行し、JIT および free-threading の代替案があるものはそれらも実行する必要があるからです。過去のこのベンチマーク実行では、Py Py が驚くべきパフォーマンスを示したため、Py Py でもテスト実行することを好みます。そして、Python のパフォーマンスをより広いエコシステムの中で位置づけるため、2 つのプログラムを Java Script (Node.js) と Rust にポートしました。私が取り組んだ完全なテストマトリックスは以下の通りです: 2 つのテストスクリプト: fibo.py: 再帰によるフィボナッチ数の計算; bubble.py: 再帰なしで乱数のリストをソート。 2 つのスレッドモード: シングルスレッド; 4 並列スレッド。 6 つの Python バージョン、加えて Py Py、Node.js、および 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 インタプリタ: スタンダード; Just-In-Time (JIT): CPython 3.13 以上のみ; Free-threading (FT): CPython 3.13 以上のみ。私の過去のベンチマークの読者は覚えているかもしれませんが、私のマトリックスには Linux と mac OS のための追加次元がありました。以前の 2 回のベンチマーク実行では、それらの間に有意な差はなかったため、今回は mac OS のテストを廃止し、すべてのテストを Gentoo Linux を実行する Intel Core i5 CPU を搭載した私の Linux ラップトップで実行しました。各参加者のパフォーマンスを測定する方法は、テストプログラムを 3 回実行し、3 回の実行時間の平均をとることです。以下に共有する結果テーブルでは、3.15 バージョンとの速度差を示し、適切な場合は特定のインタプリタの前のバージョンとの速度差も示します。速度比較では、単純な比率を使用します。1x は同等の速度を意味し、0.5x は半分の速度(またはかかる時間が 2 倍)...
Python 3.15 ベンチマークの主な目的は何ですか?
主な目的は、Python のバージョン間のパフォーマンス変化を感じ取ることではなく、Python インタプリタの包括的なパフォーマンスプロファイルを得ることではありません。
🇧🇷 Português
Resultados de Desempenho do Python 3.15
É outubro mais uma vez, o que significa que é hora de testar o novo lançamento do Python (tecnicamente, estou usando o lançamento 3.15.0rc3, o lançamento oficial 3.15 ainda falta alguns dias). Como fiz com meu artigo de desempenho do Python 3.14 há um ano, hoje compartilho uma nova execução do meu benchmark informal, comparando Python 3.15 com intérpretes anteriores que vão desde a 3.10. Se você não se interessa por gráficos e tabelas e apenas quer ler meu análise, sinta-se à vontade para pular para a seção de conclusões no final.
O benchmark que chamei de "informal" significa o quê? Objetiva e universalmente medir o desempenho de uma linguagem de programação é impossível. O que você pode fazer é escrever alguns programas e executá-los para obter uma medida de seu desempenho. Outros programas podem mostrar características de desempenho semelhantes ou podem não, realmente não há como saber.
Minha intenção com este benchmark é apenas sentir as mudanças de desempenho across as versões do Python, mas quero deixar claro que não estou tentando obter um perfil de desempenho completo do interpretador Python. Para o meu benchmark, executarei dois programas chamados fibo.py e bubble.py, que você pode inspecionar se gostar. Estes são os mesmos programas que utilizei em edições anteriores deste benchmark.
O primeiro calcula números da sequência de Fibonacci, e o segundo ordena números usando o algoritmo bubble sort. Escolhi estes dois programas como representativos de duas classes de algoritmos. O cálculo de Fibonacci é feito usando recursão, que encontrei algo ineficiente em intérpretes Python.
Do outro lado, o bubble sort apenas usa for-loops, sem nenhuma recursão. Há outros tipos de programas que meu benchmark não tenta cobrir. Em particular, note que não estou incluindo código I/O limitado neste benchmark.
Porque algumas melhorias de desempenho em versões recentes do Python giram em torno do multithreading, também criei uma variação multithreaded para cada programa, então no total tenho quatro testes diferentes. A matriz de testes completa é na verdade bastante complexa, porque tenho que executar as quatro variações de programa sob todas as versões do Python, mais as alternativas JIT e free-threading para aqueles que têm. Gosto de executar os testes sob Py Py também, porque este interpretador tem mostrado desempenho impressionante em execuções anteriores deste benchmark.
E para situar o desempenho do Python dentro do ecossistema mais amplo, também portei os dois programas para Java Script (Node.js) e Rust. Aqui está a matriz de testes completa com a qual trabalhei: 2 scripts de teste: fibo.py: calcula números da sequência de Fibonacci, com recursão; bubble.py: ordena uma lista de números gerados aleatoriamente, sem recursão. 2 modos de thread: Single-threaded; 4 threads paralelas. 6 versões de Python, mais versões recentes de Py Py, Node.js e 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 intérpretes Python: Standard; Just-In-Time (JIT): apenas para CPython 3.13+ ; Free-threading (FT): apenas para CPython 3.13+. Leitores dos meus benchmarks anteriores podem lembrar que tinha uma dimensão adicional na minha matriz para Linux vs. mac OS.
Dado que não houve diferenças significativas entre eles nas duas anteriores execuções do benchmark, decidi descartar os testes de mac OS desta vez, então todos os testes foram executados no meu laptop com Linux, que tem um processador Intel Core i5 e roda Gentoo Linux. O método que uso para medir o desempenho de cada participante deste benchmark é executar o programa de teste três vezes e pegar a duração média dos três. Nas tabelas de resultados que compartilho abaixo, também mostro a diferença de velocidade versus a versão 3.15, e quando faz sentido também a diferença de velocidade versus a versão anterior de um dado intérprete.
Para comparações de velocidade, uso uma razão simples, onde 1x significa mesma velocidade, 0.5x significa metade da velocidade (ou que levou o dobro de tempo para...
Qual é o objetivo principal do benchmark Python 3.15 descrito no artigo?
O objetivo principal é sentir as mudanças de desempenho across as versões do Python, não obter um perfil de desempenho completo do interpretador.
🇷🇺 Русский
Результаты бенчмарка производительности Python 3.15
Октябрь снова наступил, и это значит, что пришло время попробовать новый релиз Python (технически, я использую релиз 3.15.0rc3, официальный релиз 3.15 выйдет через несколько дней). Как и в моей статье о производительности Python 3.14 год назад, сегодня я делюсь новым запуском моего неформального бенчмарка, сравнивая Python 3.15 с предыдущими интерпретаторами от 3.10. Если вам не интересно графики и таблицы, и вы просто хотите прочитать мой анализ, смейтесь перейти к разделу выводов в конце. Бенчмарк, который я назвал "неформальным", что это значит? Объективная и универсальная оценка производительности программного языка невозможна. Все, что можно сделать — это написать некоторые программы и запустить их, чтобы получить меру их производительности. Другие программы могут показывать похожие характеристики производительности, или они могут не показывать, на самом деле никак не знать. Моя цель с этим бенчмарком — просто почувствовать изменения производительности между версиями Python, но я хочу сделать ясным, что я не пытаюсь получить всесторонний профиль производительности интерпретатора Python. Для моего бенчмарка я буду запускать две программы под названием fibo.py и bubble.py, которые можно просмотреть. Это те же программы, которые я использовал в предыдущих изданиях этого бенчмарка. Первый вычисляет числа из последовательности Фибоначчи, а второй сортирует числа алгоритмом пузырька. Я выбрал эти две программы как представительные двух классов алгоритмов. Вычисление Фибоначчи делается с помощью рекурсии, которую я нашел somewhat неэффективным в интерпретаторах Python. С другой стороны, пузырьковая сортировка использует только for-loop, без какой-либо рекурсии. В моем бенчмарке не пытаюсь покрыть другие типы программ. В частности, обратите внимание, что я не включаю код I/O в этот бенчмарк. Потому что некоторые улучшения производительности в последних версиях Python связаны с многопоточностью, я также создал многопоточную вариацию для каждой программы, поэтому всего у меня четыре разных теста. Полная матрица тестов на самом деле довольно сложная, потому что мне нужно запускать четыре варианта программ под всеми версиями Python, а также альтернативы JIT и free-threading для тех, у них есть. Мне нравится запускать тесты под Py Py также, потому что этот интерпретатор показывал впечатляющую производительность в предыдущих запусках этого бенчмарка. And to place Python performance within the wider ecosystem, I've also ported the two programs to Java Script (Node.js) and Rust. Вот полная матрица тестов, с которой я работал: 2 тест-скрипта: fibo.py: вычисляет числа последовательности Фибоначчи, с рекурсией; bubble.py: сортирует список случайно сгенерированных чисел, без рекурсии. 2 режима потоков: Single-threaded; 4 parallel threads. 6 версий Python, плюс последние версии Py Py, Node.js и 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 интерпретатора: Стандарт; Just-In-Time (JIT): только для CPython 3.13+; Free-threading (FT): только для CPython 3.13+. Читатели моих предыдущих бенчмарков могут помнить, что у меня была дополнительная размерность в моей матрице для Linux vs. mac OS. Учитывая, что в двух предыдущих запусках бенчмарка между ними не было значимых различий, я решил отменить тесты mac OS в этот раз, поэтому все тесты были выполнены на моем ноутбуке с Linux, на котором процессор Intel Core i5 и работает Gentoo Linux. Метод, который я использую для измерения производительности каждого участника этого бенчмарка, — это запуск тестовой программы три раза и взятие средней продолжительности трех. В таблицах результатов, которые я делю ниже, я также показываю разницу скорости относительно версии 3.15, и когда это имеет смысл, также показываю разницу скорости относительно предыдущей версии данного интерпретатора. Для сравнения скорости я использую простую отношение, где 1x означает одинаковую скорость, 0.5x означает половинную скорость (или что заняло в два раза больше времени для...
Какая основная цель Python 3.15 бенчмарка, описанной в статье?
Основная цель — почувствовать изменения производительности между версиями Python, а не получить всесторонний профиль производительности интерпретатора.
🇨🇳 简体中文
Python 3.15 性能基准测试结果
每到十月,就是时候给新版 Python 来个实测(技术上说,我使用的其实是 3.15.0rc3 版本,官方的 3.15 版本还要几天才发布)。正如我去年 Python 3.14 性能文章所做的那样,今天我分享一次新的非正式 Python 基准测试,对比 Python 3.15 与从 3.10 一路回溯的旧版解释器。如果你不感兴趣那些图表和表格,只想看我的分析,随时可以跳到文章末尾的结论章节。我刚刚把我的基准测试叫做 "non-formal"(非正式)。什么是非正式基准测试?无法获得编程语言客观、普适的性能衡量标准。你只能编写一些程序并运行它们来获得性能指标。其他程序可能显示相似的性能特征,也可能不相似,真的无法知道。我这次基准测试的意图仅仅是感受 Python 各版本之间的性能变化,但我必须明确:我并非试图获得 Python 解释器的全面性能概况。对于我的基准测试,我将运行两个名为 fibo.py 和 bubble.py 的程序,你可以查看它们。这些是我过去几次基准测试中使用过的相同程序。第一个计算斐波那契数列的数字,我发现递归在 Python 解释器中 somewhat 低效。另一方面,冒泡排序只使用 for-loop,没有任何递归。我的基准测试并未尝试覆盖其他类型的程序。特别是,注意我并未在基准测试中包含 I/O 受限代码。因为最近 Python 版本的一些性能改进围绕多线程展开,我还为每个程序创建了多线程变体,所以总共有四种不同的测试。 完整的测试矩阵 实际上,我的测试矩阵相当复杂,因为我必须在所有 Python 版本下运行四个程序变体,以及对支持它们的 JIT 和 free-threading 替代方案。我喜欢在 Py Py 下运行测试,因为这个解释器在过去的基准测试运行中展现出了令人印象深刻的性能。为了把 Python 性能置于更广泛的生态系统中,我还把这两个程序移植到了 Java Script(Node.js)和 Rust。以下是我使用的完整测试矩阵: 2个测试脚本:fibo.py:使用递归计算斐波那契数字;bubble.py:对随机生成的数字列表进行排序,不使用递归。 2种线程模式:单线程;4个并行线程。 6个 Python 版本,加上 Py Py、Node.js 和 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 解释器:标准模式;即时编译(JIT):仅限 CPython 3.13+;Free-threading(FT):仅限 CPython 3.13+。我之前基准测试的读者可能记得,我矩阵中有一个额外的维度,用于对比 Linux 和 mac OS。考虑到在这两次之前的基准测试运行中,它们之间没有显著差异,这次我决定取消 mac OS 测试,所以所有测试都在我运行 Gentoo Linux 的 Linux 笔记本电脑上进行,配备 Intel Core i5 CPU。我测量每个参与者性能的方法是运行测试程序三次,并取三次运行时间的平均值。在我下面分享的结果表中,我还展示了与 3.15 版本的速度差异,并且在合理的情况下也展示了与给定解释器上一版本的速度差异。对于速度比较,我使用一个简单的比率,其中 1x 表示同等速度,0.5x 表示半速(或耗时是原来的两倍)...
Python 3.15 基准测试的主要目的是什么?
主要目的是感受 Python 各版本之间的性能变化,而非获得解释器的全面性能概况。