В этой статье описаны результаты тестирования производительности Python 3.13 по сравнению с Python 3.12. Всего было проведено 100 различных тестов производительности на компьютерах с процессорами AMD Ryzen 7000-й серии и процессорами Intel Core 13-го поколения для настольных ПК, ноутбуков или мини-ПК.
Все тесты проводились на компьютерах с Windows 11 с использованием библиотеки pyperformance 1.11.0 в Python 3.12.7 и Python 3.13.0 (обе 64-разрядные версии).
AMD Ryzen 7000-й серии для настольных ПК
В первой части тестирования участвовал настольный компьютер с процессором AMD Ryzen 9 7900, оперативной памятью DDR5 и накопителем M.2 PCIe Gen4 NVMe. В таблице ниже показаны результаты 100 тестов, выполненных с использованием Python 3.12 (в качестве эталона) и Python 3.13 на этом устройстве.
Название теста | Python 3.12 | Python 3.13 |
---|---|---|
2to3 | 226 мс | 217 мс (1.04x быстрее) |
async_generators | 262 мс | 256 мс (1.02x быстрее) |
async_tree_cpu_io_mixed | 514 мс | 411 мс (1.25x быстрее) |
async_tree_cpu_io_mixed_tg | 508 мс | 393 мс (1.29x быстрее) |
async_tree_eager | 70.9 мс | 73.4 мс (1.04x медленнее) |
async_tree_eager_cpu_io_mixed | 303 мс | 312 мс (1.03x медленнее) |
async_tree_eager_cpu_io_mixed_tg | 278 мс | 281 мс (незначительно) |
async_tree_eager_io | 982 мс | 636 мс (1.54x быстрее) |
async_tree_eager_io_tg | 969 мс | 600 мс (1.61x быстрее) |
async_tree_eager_memoization | 170 мс | 174 мс (1.03x медленнее) |
async_tree_eager_memoization_tg | 138 мс | 140 мс (1.01x медленнее) |
async_tree_eager_tg | 49.0 мс | 49.0 мс (незначительно) |
async_tree_io | 852 мс | 562 мс (1.52x быстрее) |
async_tree_io_tg | 865 мс | 562 мс (1.54x быстрее) |
async_tree_memoization | 374 мс | 290 мс (1.29x быстрее) |
async_tree_memoization_tg | 369 мс | 307 мс (1.20x быстрее) |
async_tree_none | 310 мс | 233 мс (1.33x быстрее) |
async_tree_none_tg | 284 мс | 214 мс (1.32x быстрее) |
asyncio_tcp | 461 мс | 451 мс (1.02x быстрее) |
asyncio_tcp_ssl | 1.88 с | 1.47 с (1.28x быстрее) |
bench_mp_pool | 77.3 мс | 77.7 мс (1.01x медленнее) |
bench_thread_pool | 692 мкс | 667 мкс (1.04x быстрее) |
chameleon | 5.43 мс | 4.90 мс (1.11x быстрее) |
chaos | 45.7 мс | 39.4 мс (1.16x быстрее) |
comprehensions | 13.7 мкс | 10.0 мкс (1.37x быстрее) |
coroutines | 15.7 мс | 14.3 мс (1.10x быстрее) |
coverage | 35.4 мс | 48.3 мс (1.36x медленнее) |
create_gc_cycles | 538 мкс | 609 мкс (1.13x медленнее) |
crypto_pyaes | 51.6 мс | 48.6 мс (1.06x быстрее) |
dask | 236 мс | 248 мс (1.05x медленнее) |
deepcopy | 224 мкс | 215 мкс (1.04x быстрее) |
deepcopy_memo | 25.8 мкс | 23.6 мкс (1.09x быстрее) |
deepcopy_reduce | 2.08 мкс | 2.00 мкс (1.04x быстрее) |
deltablue | 2.56 мс | 2.15 мс (1.19x быстрее) |
django_template | 23.0 мс | 22.6 мс (1.02x быстрее) |
docutils | 1.46 с | 1.40 с (1.05x быстрее) |
dulwich_log | 49.6 мс | 46.5 мс (1.07x быстрее) |
fannkuch | 258 мс | 252 мс (незначительно) |
float | 59.1 мс | 54.2 мс (1.09x быстрее) |
gc_traversal | 1.23 мс | 1.28 мс (1.03x медленнее) |
generators | 24.6 мс | 19.9 мс (1.24x быстрее) |
genshi_text | 15.5 мс | 15.6 мс (незначительно) |
genshi_xml | 92.3 мс | 89.3 мс (1.01x быстрее) |
hexiom | 4.56 мс | 4.01 мс (1.14x быстрее) |
html5lib | 32.9 мс | 32.0 мс (1.03x быстрее) |
json_dumps | 5.71 мс | 5.79 мс (1.01x медленнее) |
json_loads | 13.6 мкс | 14.1 мкс (1.04x медленнее) |
logging_format | 6.66 мкс | 5.92 мкс (1.12x быстрее) |
logging_silent | 68.2 нс | 63.3 нс (1.08x быстрее) |
logging_simple | 6.29 мкс | 5.46 мкс (1.15x быстрее) |
mako | 7.56 мс | 6.79 мс (1.11x быстрее) |
mdp | 1.61 с | 1.60 с (незначительно) |
meteor_contest | 67.3 мс | 67.4 мс (незначительно) |
nbody | 86.1 мс | 78.3 мс (1.10x быстрее) |
nqueens | 65.3 мс | 58.0 мс (1.13x быстрее) |
pathlib | 230 мс | 226 мс (1.02x быстрее) |
pickle | 7.43 мкс | 7.41 мкс (незначительно) |
pickle_dict | 19.8 мкс | 19.2 мкс (1.03x быстрее) |
pickle_list | 2.85 мкс | 2.67 мкс (1.07x быстрее) |
pickle_pure_python | 199 мкс | 178 мкс (1.12x быстрее) |
pidigits | 138 мс | 135 мс (1.02x быстрее) |
pprint_pformat | 1.02 с | 998 мс (1.02x быстрее) |
pprint_safe_repr | 500 мс | 488 мс (1.02x быстрее) |
pyflate | 322 мс | 299 мс (1.08x быстрее) |
python_startup | 29.4 мс | 30.7 мс (1.04x медленнее) |
python_startup_no_site | 31.8 мс | 33.2 мс (1.05x медленнее) |
raytrace | 202 мс | 171 мс (1.18x быстрее) |
regex_compile | 82.2 мс | 71.1 мс (1.16x быстрее) |
regex_dna | 101 мс | 103 мс (1.03x медленнее) |
regex_effbot | 1.79 мс | 1.83 мс (1.02x медленнее) |
regex_v8 | 14.3 мс | 16.1 мс (1.13x медленнее) |
richards | 28.5 мс | 28.7 мс (1.01x медленнее) |
richards_super | 32.0 мс | 32.3 мс (1.01x медленнее) |
scimark_fft | 226 мс | 209 мс (1.08x быстрее) |
scimark_lu | 76.9 мс | 68.7 мс (1.12x быстрее) |
scimark_monte_carlo | 49.0 мс | 44.7 мс (1.10x быстрее) |
scimark_sor | 92.5 мс | 80.6 мс (1.15x быстрее) |
scimark_sparse_mat_mult | 3.55 мс | 3.16 мс (1.13x быстрее) |
spectral_norm | 77.6 мс | 70.4 мс (1.10x быстрее) |
sqlglot_normalize | 181 мс | 170 мс (1.06x быстрее) |
sqlglot_optimize | 33.4 мс | 32.2 мс (1.04x быстрее) |
sqlglot_parse | 866 мкс | 781 мкс (1.11x быстрее) |
sqlglot_transpile | 1.05 мс | 949 мкс (1.11x быстрее) |
sqlite_synth | 1.54 мкс | 1.47 мкс (1.05x быстрее) |
sympy_expand | 249 мс | 246 мс (1.01x быстрее) |
sympy_integrate | 11.6 мс | 11.0 мс (1.06x быстрее) |
sympy_str | 155 мс | 143 мс (1.08x быстрее) |
sympy_sum | 83.0 мс | 75.1 мс (1.11x быстрее) |
telco | 4.40 мс | 4.87 мс (1.11x медленнее) |
tomli_loads | 1.51 с | 1.40 с (1.08x быстрее) |
tornado_http | 97.1 мс | 91.7 мс (1.06x быстрее) |
typing_runtime_protocols | 105 мкс | 97.6 мкс (1.08x быстрее) |
unpack_sequence | 53.5 нс | 45.5 нс (1.17x быстрее) |
unpickle | 9.02 мкс | 9.14 мкс (1.01x медленнее) |
unpickle_list | 3.19 мкс | 2.75 мкс (1.16x быстрее) |
unpickle_pure_python | 153 мкс | 134 мкс (1.14x быстрее) |
xml_etree_generate | 59.8 мс | 57.0 мс (1.05x быстрее) |
xml_etree_iterparse | 58.7 мс | 55.3 мс (1.06x быстрее) |
xml_etree_parse | 82.7 мс | 76.6 мс (1.08x быстрее) |
xml_etree_process | 41.4 мс | 39.6 мс (1.05x быстрее) |
Результат (среднее геометрическое) | 1.08x быстрее |
Анализ измерений показывает, что Python 3.13 имеет лучшие результаты по производительности по сравнению с Python 3.12 в следующих тестах: async_tree_eager_io_tg (1.61x быстрее), async_tree_eager_io (1.54x быстрее), async_tree_io_tg (1.54x быстрее). Однако можете заметить падение производительности в некоторых тестах, особенно в coverage (1.36x медленнее), create_gc_cycles (1.13x медленнее), regex_v8 (1.13x медленнее).
Кроме того, можно обнаружить различия в производительности между Python 3.13 и Python 3.12 на основе тестов, принадлежащих определенным группам. В таблице ниже показано среднее геометрическое для тестов из отдельных групп для Python 3.13 по сравнению с Python 3.12.
Группа тестов | Python 3.13 по сравнению с Python 3.12 |
---|---|
apps | 1.06x быстрее |
asyncio | 1.22x быстрее |
math | 1.07x быстрее |
regex | незначительно |
serialize | 1.05x быстрее |
startup | 1.04x медленнее |
template | 1.03x быстрее |
Процессор Intel Core 13-го поколения для мобильных ПК
Во второй части тестирования участвовал мини-ПК с процессором Intel Core i3-1315U (который также используется в ноутбуках), оперативной памятью DDR4 и накопителем M.2 PCIe Gen4 NVMe. В таблице ниже показаны результаты 98 тестов, выполненных с использованием Python 3.12 (в качестве эталона) и Python 3.13 на этом устройстве. Тест «dask» был пропущен, поскольку его не удалось запустить в этой конфигурации в Python 3.13.
Название теста | Python 3.12 | Python 3.13 |
---|---|---|
2to3 | 260 мс | 256 мс (1.01x быстрее) |
async_generators | 253 мс | 251 мс (1.01x быстрее) |
async_tree_cpu_io_mixed | 544 мс | 428 мс (1.27x быстрее) |
async_tree_cpu_io_mixed_tg | 546 мс | 412 мс (1.33x быстрее) |
async_tree_eager | 78.7 мс | 83.9 мс (1.07x медленнее) |
async_tree_eager_cpu_io_mixed | 343 мс | 336 мс (1.02x быстрее) |
async_tree_eager_cpu_io_mixed_tg | 307 мс | 301 мс (1.02x быстрее) |
async_tree_eager_io | 818 мс | 584 мс (1.40x быстрее) |
async_tree_eager_io_tg | 766 мс | 556 мс (1.38x быстрее) |
async_tree_eager_memoization | 203 мс | 203 мс (незначительно) |
async_tree_eager_memoization_tg | 159 мс | 161 мс (незначительно) |
async_tree_eager_tg | 52.9 мс | 54.1 мс (1.02x медленнее) |
async_tree_io | 776 мс | 565 мс (1.37x быстрее) |
async_tree_io_tg | 798 мс | 556 мс (1.43x быстрее) |
async_tree_memoization | 379 мс | 308 мс (1.23x быстрее) |
async_tree_memoization_tg | 397 мс | 322 мс (1.23x быстрее) |
async_tree_none | 330 мс | 252 мс (1.31x быстрее) |
async_tree_none_tg | 310 мс | 230 мс (1.35x быстрее) |
asyncio_tcp | 609 мс | 585 мс (незначительно) |
asyncio_tcp_ssl | 2.92 с | 1.93 с (1.51x быстрее) |
bench_mp_pool | 93.2 мс | 93.8 мс (незначительно) |
bench_thread_pool | 1.02 мс | 982 мкс (1.04x быстрее) |
chameleon | 5.53 мс | 5.41 мс (1.02x быстрее) |
chaos | 49.3 мс | 41.9 мс (1.18x быстрее) |
comprehensions | 15.6 мкс | 11.4 мкс (1.37x быстрее) |
coroutines | 15.5 мс | 14.1 мс (1.10x быстрее) |
coverage | 37.3 мс | 144 мс (3.85x медленнее) |
create_gc_cycles | 783 мкс | 883 мкс (1.13x медленнее) |
crypto_pyaes | 53.9 мс | 50.0 мс (1.08x быстрее) |
deepcopy | 251 мкс | 260 мкс (1.04x медленнее) |
deepcopy_memo | 27.2 мкс | 25.4 мкс (1.07x быстрее) |
deepcopy_reduce | 2.24 мкс | 2.30 мкс (1.03x медленнее) |
deltablue | 2.31 мс | 2.11 мс (1.09x быстрее) |
django_template | 25.2 мс | 24.9 мс (1.01x быстрее) |
docutils | 1.84 с | 1.93 с (1.05x медленнее) |
fannkuch | 281 мс | 278 мс (1.01x быстрее) |
float | 59.8 мс | 54.6 мс (1.10x быстрее) |
gc_traversal | 1.78 мс | 1.87 мс (1.05x медленнее) |
generators | 22.4 мс | 22.4 мс (незначительно) |
genshi_text | 16.3 мс | 17.2 мс (1.06x медленнее) |
genshi_xml | 96.2 мс | 96.8 мс (1.08x медленнее) |
hexiom | 4.48 мс | 4.27 мс (1.05x быстрее) |
html5lib | 42.6 мс | 44.2 мс (1.04x медленнее) |
json_dumps | 6.57 мс | 6.64 мс (незначительно) |
json_loads | 16.3 мкс | 16.5 мкс (незначительно) |
logging_format | 7.15 мкс | 6.60 мкс (1.08x быстрее) |
logging_silent | 65.4 нс | 59.6 нс (1.10x быстрее) |
logging_simple | 6.75 мкс | 6.11 мкс (1.10x быстрее) |
mako | 7.30 мс | 7.02 мс (1.04x быстрее) |
mdp | 1.65 с | 1.72 с (1.04x медленнее) |
meteor_contest | 82.9 мс | 81.2 мс (1.02x быстрее) |
nbody | 80.2 мс | 75.7 мс (1.06x быстрее) |
nqueens | 66.3 мс | 63.8 мс (1.04x быстрее) |
pathlib | 82.9 мс | 81.1 мс (1.02x быстрее) |
pickle | 8.26 мкс | 8.29 мкс (незначительно) |
pickle_dict | 21.2 мкс | 20.4 мкс (1.04x быстрее) |
pickle_list | 3.28 мкс | 3.45 мкс (1.05x медленнее) |
pickle_pure_python | 218 мкс | 209 мкс (1.04x быстрее) |
pidigits | 171 мс | 168 мс (1.02x быстрее) |
pprint_pformat | 1.16 с | 1.13 с (1.02x быстрее) |
pprint_safe_repr | 572 мс | 560 мс (1.02x быстрее) |
pyflate | 341 мс | 321 мс (1.06x быстрее) |
python_startup | 25.4 мс | 26.1 мс (1.03x медленнее) |
python_startup_no_site | 21.9 мс | 21.7 мс (незначительно) |
raytrace | 218 мс | 176 мс (1.24x быстрее) |
regex_compile | 97.5 мс | 91.4 мс (1.07x быстрее) |
regex_dna | 131 мс | 131 мс (незначительно) |
regex_effbot | 1.79 мс | 1.78 мс (незначительно) |
regex_v8 | 15.0 мс | 18.9 мс (1.26x медленнее) |
richards | 29.8 мс | 29.2 мс (1.02x быстрее) |
richards_super | 33.8 мс | 33.3 мс (1.02x быстрее) |
scimark_fft | 220 мс | 193 мс (1.14x быстрее) |
scimark_lu | 70.5 мс | 60.1 мс (1.17x быстрее) |
scimark_monte_carlo | 49.7 мс | 45.7 мс (1.09x быстрее) |
scimark_sor | 92.4 мс | 81.5 мс (1.13x быстрее) |
scimark_sparse_mat_mult | 3.14 мс | 2.64 мс (1.19x быстрее) |
spectral_norm | 77.4 мс | 66.6 мс (1.16x быстрее) |
sqlglot_normalize | 203 мс | 202 мс (1.01x быстрее) |
sqlglot_optimize | 37.8 мс | 38.4 мс (1.01x медленнее) |
sqlglot_parse | 922 мкс | 860 мкс (1.07x быстрее) |
sqlglot_transpile | 1.16 мс | 1.10 мс (1.06x быстрее) |
sqlite_synth | 1.96 мкс | 1.83 мкс (1.07x быстрее) |
sympy_expand | 307 мс | 331 мс (1.08x медленнее) |
sympy_integrate | 14.3 мс | 14.0 мс (1.02x быстрее) |
sympy_str | 189 мс | 191 мс (1.01x медленнее) |
sympy_sum | 100 мс | 99.3 мс (1.01x быстрее) |
telco | 4.70 мс | 5.62 мс (1.19x медленнее) |
tomli_loads | 1.56 с | 1.58 с (1.01x медленнее) |
tornado_http | 103 мс | 97.7 мс (1.05x быстрее) |
typing_runtime_protocols | 121 мкс | 116 мкс (1.05x быстрее) |
unpack_sequence | 57.4 нс | 44.4 нс (1.29x быстрее) |
unpickle | 9.62 мкс | 9.89 мкс (1.03x медленнее) |
unpickle_list | 3.28 мкс | 3.05 мкс (1.07x быстрее) |
unpickle_pure_python | 151 мкс | 144 мкс (1.05x быстрее) |
xml_etree_generate | 63.7 мс | 60.2 мс (1.06x быстрее) |
xml_etree_iterparse | 71.7 мс | 67.4 мс (1.06x быстрее) |
xml_etree_parse | 106 мс | 104 мс (1.02x быстрее) |
xml_etree_process | 42.9 мс | 41.9 мс (1.02x быстрее) |
Результат (среднее геометрическое) | 1.05x быстрее |
Анализ измерений показывает, что Python 3.13 имеет лучшие результаты по производительности по сравнению с Python 3.12 в следующих тестах: asyncio_tcp_ssl (1.51x быстрее), async_tree_io_tg (1.43x быстрее), async_tree_eager_io (1.40x быстрее). Однако можете заметить падение производительности в некоторых тестах, особенно в coverage (3.85x медленнее), regex_v8 (1.26x медленнее), telco (1.19x медленнее).
Кроме того, можно обнаружить различия в производительности между Python 3.13 и Python 3.12 на основе тестов, принадлежащих определенным группам. В таблице ниже показано среднее геометрическое для тестов из отдельных групп для Python 3.13 по сравнению с Python 3.12.
Группа тестов | Python 3.13 по сравнению с Python 3.12 |
---|---|
apps | незначительно |
asyncio | 1.19x быстрее |
math | 1.06x быстрее |
regex | 1.04x медленнее |
serialize | 1.02x быстрее |
startup | 1.01x медленнее |
template | 1.02x медленнее |