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