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

В этой статье описаны результаты тестирования производительности Python 3.11 по сравнению с Python 3.10. Всего было проведено 87 различных тестов производительности на компьютерах с процессорами AMD Ryzen 7000-й серии и процессорами Intel Core 13-го поколения для настольных ПК, ноутбуков или мини-ПК.

Все тесты проводились на компьютерах с Windows 11 с использованием библиотеки pyperformance 1.0.9 в Python 3.10.11 и Python 3.11.6 (обе 64-разрядные версии).

AMD Ryzen 7000-й серии для настольных ПК

В первой части тестирования участвовал настольный компьютер с процессором AMD Ryzen 9 7900, оперативной памятью DDR5 и накопителем M.2 PCIe Gen4 NVMe. В таблице ниже показаны результаты 87 тестов, выполненных с использованием Python 3.10 (в качестве эталона) и Python 3.11 на этом устройстве.

Название теста Python 3.10 Python 3.11
2to3 216 мс 191 мс (1.13x быстрее)
async_generators 230 мс 198 мс (1.16x быстрее)
async_tree_cpu_io_mixed 685 мс 580 мс (1.18x быстрее)
async_tree_io 1.32 с 949 мс (1.39x быстрее)
async_tree_memoization 560 мс 420 мс (1.33x быстрее)
async_tree_none 471 мс 340 мс (1.39x быстрее)
asyncio_tcp 686 мс 708 мс (незначительно)
asyncio_tcp_ssl 2.04 с 2.02 с (незначительно)
bench_mp_pool 55.4 мс 54.9 мс (1.01x быстрее)
bench_thread_pool 725 мкс 687 мкс (1.05x быстрее)
chameleon 5.89 мс 5.23 мс (1.13x быстрее)
chaos 57.1 мс 45.7 мс (1.25x быстрее)
comprehensions 14.6 мкс 14.4 мкс (1.02x быстрее)
coroutines 17.3 мс 16.9 мс (1.02x быстрее)
coverage 33.5 мс 141 мс (4.21x медленнее)
create_gc_cycles 637 мкс 521 мкс (1.22x быстрее)
crypto_pyaes 62.7 мс 48.3 мс (1.30x быстрее)
dask 263 мс 235 мс (1.12x быстрее)
deepcopy 253 мкс 225 мкс (1.12x быстрее)
deepcopy_memo 28.9 мкс 25.1 мкс (1.15x быстрее)
deepcopy_reduce 2.20 мкс 2.02 мкс (1.09x быстрее)
deltablue 4.27 мс 2.63 мс (1.63x быстрее)
django_template 28.2 мс 23.0 мс (1.22x быстрее)
docutils 1.63 с 1.39 с (1.18x быстрее)
fannkuch 256 мс 240 мс (1.07x быстрее)
float 66.7 мс 53.5 мс (1.25x быстрее)
gc_traversal 1.20 мс 1.25 мс (1.04x медленнее)
generators 41.8 мс 41.0 мс (незначительно)
genshi_text 18.7 мс 16.6 мс (1.13x быстрее)
genshi_xml 132 мс 95.9 мс (1.07x быстрее)
hexiom 5.46 мс 4.39 мс (1.25x быстрее)
html5lib 39.3 мс 31.2 мс (1.26x быстрее)
json_dumps 8.09 мс 7.72 мс (1.05x быстрее)
json_loads 13.3 мкс 12.7 мкс (1.05x быстрее)
logging_format 6.74 мкс 6.35 мкс (1.06x быстрее)
logging_silent 102 нс 71.6 нс (1.43x быстрее)
logging_simple 6.36 мкс 6.00 мкс (1.06x быстрее)
mako 9.04 мс 7.49 мс (1.21x быстрее)
mdp 1.68 с 1.62 с (1.04x быстрее)
meteor_contest 65.9 мс 65.9 мс (незначительно)
nbody 81.8 мс 73.6 мс (1.11x быстрее)
nqueens 61.3 мс 60.3 мс (незначительно)
pathlib 81.3 мс 79.9 мс (1.02x быстрее)
pickle 6.86 мкс 6.66 мкс (1.03x быстрее)
pickle_dict 18.5 мкс 18.3 мкс (1.01x быстрее)
pickle_list 2.58 мкс 2.59 мкс (незначительно)
pickle_pure_python 258 мкс 191 мкс (1.35x быстрее)
pidigits 136 мс 136 мс (незначительно)
pprint_pformat 1.17 с 983 мс (1.19x быстрее)
pprint_safe_repr 568 мс 479 мс (1.19x быстрее)
pyflate 387 мс 293 мс (1.32x быстрее)
python_startup 17.4 мс 15.2 мс (1.15x быстрее)
python_startup_no_site 13.2 мс 12.5 мс (1.05x быстрее)
raytrace 275 мс 204 мс (1.35x быстрее)
regex_compile 89.5 мс 77.1 мс (1.16x быстрее)
regex_dna 111 мс 103 мс (1.07x быстрее)
regex_effbot 1.78 мс 1.64 мс (1.09x быстрее)
regex_v8 15.0 мс 14.7 мс (1.02x быстрее)
richards 41.7 мс 29.8 мс (1.40x быстрее)
richards_super 50.9 мс 37.0 мс (1.37x быстрее)
scimark_fft 223 мс 214 мс (1.04x быстрее)
scimark_lu 94.3 мс 68.7 мс (1.37x быстрее)
scimark_monte_carlo 58.1 мс 44.2 мс (1.32x быстрее)
scimark_sor 105 мс 80.4 мс (1.30x быстрее)
scimark_sparse_mat_mult 3.47 мс 3.29 мс (1.05x быстрее)
spectral_norm 82.1 мс 75.7 мс (1.08x быстрее)
sqlglot_normalize 198 мс 178 мс (1.11x быстрее)
sqlglot_optimize 37.1 мс 32.3 мс (1.15x быстрее)
sqlglot_parse 1.12 мс 891 мкс (1.26x быстрее)
sqlglot_transpile 1.33 мс 1.06 мс (1.25x быстрее)
sqlite_synth 1.54 мкс 1.41 мкс (1.09x быстрее)
sympy_expand 265 мс 248 мс (1.07x быстрее)
sympy_integrate 12.7 мс 11.8 мс (1.07x быстрее)
sympy_str 162 мс 152 мс (1.06x быстрее)
sympy_sum 91.4 мс 86.4 мс (1.06x быстрее)
telco 3.80 мс 3.91 мс (1.03x медленнее)
tomli_loads 1.69 с 1.46 с (1.15x быстрее)
tornado_http 98.2 мс 86.9 мс (1.13x быстрее)
typing_runtime_protocols 314 мкс 307 мкс (1.02x быстрее)
unpack_sequence 39.3 нс 35.1 нс (1.12x быстрее)
unpickle 8.59 мкс 8.13 мкс (1.06x быстрее)
unpickle_list 2.87 мкс 2.86 мкс (незначительно)
unpickle_pure_python 176 мкс 150 мкс (1.18x быстрее)
xml_etree_generate 55.2 мс 53.6 мс (1.03x быстрее)
xml_etree_iterparse 57.6 мс 60.0 мс (1.04x медленнее)
xml_etree_parse 83.4 мс 82.3 мс (1.01x быстрее)
xml_etree_process 44.4 мс 38.4 мс (1.16x быстрее)
Результат (среднее геометрическое) 1.11x быстрее

Анализ измерений показывает, что Python 3.11 имеет лучшие результаты по производительности по сравнению с Python 3.10 в следующих тестах: deltablue (1.63x быстрее), logging_silent (1.43x быстрее), richards (1.40x быстрее). Однако можно заметить падение производительности в некоторых тестах, особенно в coverage (4.21x медленнее), sqlglot_parse (1.26x быстрее), gc_traversal (1.04x медленнее).

Кроме того, можно обнаружить различия в производительности между Python 3.11 и Python 3.10 на основе тестов, принадлежащих определенным группам. В таблице ниже показано среднее геометрическое для тестов из отдельных групп для Python 3.11 по сравнению с Python 3.10.

Группа тестов Python 3.11 по сравнению с Python 3.10
apps 1.16x быстрее
asyncio 1.32x быстрее
math 1.12x быстрее
regex 1.08x быстрее
serialize 1.07x быстрее
startup 1.10x быстрее
template 1.16x быстрее

Процессор Intel Core 13-го поколения для мобильных ПК

Во второй части тестирования участвовал мини-ПК с процессором Intel Core i3-1315U (который также используется в ноутбуках), оперативной памятью DDR4 и накопителем M.2 PCIe Gen4 NVMe. В таблице ниже показаны результаты 87 тестов, выполненных с использованием Python 3.10 (в качестве эталона) и Python 3.11 на этом устройстве.

Название теста Python 3.10 Python 3.11
2to3 282 мс 250 мс (1.13x быстрее)
async_generators 254 мс 208 мс (1.22x быстрее)
async_tree_cpu_io_mixed 716 мс 615 мс (1.16x быстрее)
async_tree_io 1.16 с 864 мс (1.34x быстрее)
async_tree_memoization 593 мс 463 мс (1.28x быстрее)
async_tree_none 486 мс 373 мс (1.30x быстрее)
asyncio_tcp 981 мс 966 мс (незначительно)
asyncio_tcp_ssl 2.43 с 3.22 с (1.33x медленнее)
bench_mp_pool 89.5 мс 87.2 мс (1.03x быстрее)
bench_thread_pool 1.24 мс 1.13 мс (1.09x быстрее)
chameleon 6.47 мс 6.01 мс (1.08x быстрее)
chaos 68.8 мс 55.7 мс (1.24x быстрее)
comprehensions 18.4 мкс 18.4 мкс (незначительно)
coroutines 18.0 мс 16.8 мс (1.07x быстрее)
coverage 33.0 мс 163 мс (4.95x медленнее)
create_gc_cycles 888 мкс 799 мкс (1.11x быстрее)
crypto_pyaes 70.3 мс 54.9 мс (1.28x быстрее)
dask 431 мс 379 мс (1.14x быстрее)
deepcopy 293 мкс 282 мкс (1.04x быстрее)
deepcopy_memo 32.0 мкс 28.9 мкс (1.11x быстрее)
deepcopy_reduce 2.47 мкс 2.35 мкс (1.05x быстрее)
deltablue 4.71 мс 3.02 мс (1.56x быстрее)
django_template 33.3 мс 27.6 мс (1.21x быстрее)
docutils 2.19 с 1.86 с (1.18x быстрее)
fannkuch 306 мс 283 мс (1.08x быстрее)
float 70.0 мс 62.2 мс (1.13x быстрее)
gc_traversal 1.69 мс 1.80 мс (1.07x медленнее)
generators 36.0 мс 38.2 мс (1.06x медленнее)
genshi_text 21.6 мс 19.5 мс (1.11x быстрее)
genshi_xml 153 мс 118 мс (1.05x быстрее)
hexiom 6.22 мс 5.19 мс (1.20x быстрее)
html5lib 56.0 мс 45.5 мс (1.23x быстрее)
json_dumps 9.76 мс 8.76 мс (1.11x быстрее)
json_loads 16.0 мкс 16.3 мкс (1.02x медленнее)
logging_format 8.15 мкс 7.67 мкс (1.06x быстрее)
logging_silent 106 нс 81.4 нс (1.30x быстрее)
logging_simple 7.60 мкс 7.25 мкс (1.05x быстрее)
mako 9.78 мс 8.19 мс (1.19x быстрее)
mdp 1.96 с 1.93 с (1.01x быстрее)
meteor_contest 83.7 мс 85.9 мс (1.03x медленнее)
nbody 80.5 мс 82.0 мс (незначительно)
nqueens 75.9 мс 73.8 мс (1.03x быстрее)
pathlib 77.5 мс 73.4 мс (1.06x быстрее)
pickle 7.85 мкс 7.71 мкс (1.02x быстрее)
pickle_dict 20.9 мкс 22.0 мкс (1.05x медленнее)
pickle_list 3.11 мкс 3.23 мкс (1.04x медленнее)
pickle_pure_python 302 мкс 229 мкс (1.32x быстрее)
pidigits 167 мс 169 мс (1.01x медленнее)
pprint_pformat 1.39 с 1.19 с (1.17x быстрее)
pprint_safe_repr 676 мс 581 мс (1.16x быстрее)
pyflate 461 мс 359 мс (1.28x быстрее)
python_startup 25.0 мс 23.1 мс (1.08x быстрее)
python_startup_no_site 19.4 мс 19.8 мс (1.02x медленнее)
raytrace 320 мс 233 мс (1.38x быстрее)
regex_compile 118 мс 102 мс (1.16x быстрее)
regex_dna 148 мс 136 мс (1.09x быстрее)
regex_effbot 1.88 мс 1.72 мс (1.10x быстрее)
regex_v8 17.0 мс 15.5 мс (1.10x быстрее)
richards 46.6 мс 35.0 мс (1.33x быстрее)
richards_super 58.5 мс 43.1 мс (1.36x быстрее)
scimark_fft 214 мс 212 мс (1.01x быстрее)
scimark_lu 93.7 мс 71.5 мс (1.31x быстрее)
scimark_monte_carlo 64.1 мс 53.3 мс (1.20x быстрее)
scimark_sor 114 мс 87.5 мс (1.30x быстрее)
scimark_sparse_mat_mult 2.97 мс 2.97 мс (незначительно)
spectral_norm 84.8 мс 77.2 мс (1.10x быстрее)
sqlglot_normalize 234 мс 219 мс (1.07x быстрее)
sqlglot_optimize 44.8 мс 40.6 мс (1.10x быстрее)
sqlglot_parse 1.40 мс 1.07 мс (1.30x быстрее)
sqlglot_transpile 1.67 мс 1.31 мс (1.28x быстрее)
sqlite_synth 2.16 мкс 1.97 мкс (1.10x быстрее)
sympy_expand 367 мс 350 мс (1.05x быстрее)
sympy_integrate 17.4 мс 15.9 мс (1.09x быстрее)
sympy_str 223 мс 215 мс (1.04x быстрее)
sympy_sum 124 мс 118 мс (1.05x быстрее)
telco 4.42 мс 4.60 мс (1.04x медленнее)
tomli_loads 1.89 с 1.60 с (1.18x быстрее)
tornado_http 140 мс 116 мс (1.20x быстрее)
typing_runtime_protocols 378 мкс 377 мкс (незначительно)
unpack_sequence 44.9 нс 52.6 нс (1.17x медленнее)
unpickle 9.21 мкс 9.04 мкс (1.02x быстрее)
unpickle_list 3.16 мкс 2.99 мкс (1.06x быстрее)
unpickle_pure_python 209 мкс 173 мкс (1.21x быстрее)
xml_etree_generate 61.8 мс 62.2 мс (незначительно)
xml_etree_iterparse 74.4 мс 75.5 мс (1.01x медленнее)
xml_etree_parse 114 мс 116 мс (1.02x медленнее)
xml_etree_process 49.5 мс 42.7 мс (1.16x быстрее)
Результат (среднее геометрическое) 1.09x быстрее

Анализ измерений показывает, что Python 3.11 имеет лучшие результаты по производительности по сравнению с Python 3.10 в следующих тестах: deltablue (1.56x быстрее), raytrace (1.38x быстрее), richards_super (1.36x быстрее). Однако можно заметить падение производительности в некоторых тестах, особенно в coverage (4.95x медленнее), asyncio_tcp_ssl (1.33x медленнее), unpack_sequence (1.17x медленнее).

Кроме того, можно обнаружить различия в производительности между Python 3.11 и Python 3.10 на основе тестов, принадлежащих определенным группам. В таблице ниже показано среднее геометрическое для тестов из отдельных групп для Python 3.11 по сравнению с Python 3.10.

Группа тестов Python 3.11 по сравнению с Python 3.10
apps 1.16x быстрее
asyncio 1.27x быстрее
math 1.03x быстрее
regex 1.11x быстрее
serialize 1.06x быстрее
startup 1.03x быстрее
template 1.14x быстрее
Polski
English
Русский