Python 3.12 против Python 3.13 – тестирование производительности

В этой статье описаны результаты тестирования производительности 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 медленнее
Polski
English
Русский