В этой статье описаны результаты тестирования производительности Python 3.10 по сравнению с Python 3.9. Всего было проведено 88 различных тестов производительности на компьютерах с процессорами AMD Ryzen 7000-й серии и процессорами Intel Core 13-го поколения для настольных ПК, ноутбуков или мини-ПК.
Все тесты проводились на компьютерах с Windows 11 с использованием библиотеки pyperformance 1.0.9 в Python 3.9.13 и Python 3.10.11 (обе 64-разрядные версии).
AMD Ryzen 7000-й серии для настольных ПК
В первой части тестирования участвовал настольный компьютер с процессором AMD Ryzen 9 7900, оперативной памятью DDR5 и накопителем M.2 PCIe Gen4 NVMe. В таблице ниже показаны результаты 88 тестов, выполненных с использованием Python 3.9 (в качестве эталона) и Python 3.10 на этом устройстве.
Название теста | Python 3.9 | Python 3.10 |
---|---|---|
2to3 | 217 мс | 216 мс (незначительно) |
async_generators | 221 мс | 230 мс (1.04x медленнее) |
async_tree_cpu_io_mixed | 682 мс | 685 мс (незначительно) |
async_tree_io | 1.33 с | 1.32 с (незначительно) |
async_tree_memoization | 559 мс | 560 мс (незначительно) |
async_tree_none | 479 мс | 471 мс (незначительно) |
asyncio_tcp | 619 мс | 686 мс (1.11x медленнее) |
asyncio_tcp_ssl | 1.76 с | 2.04 с (1.16x медленнее) |
bench_mp_pool | 56.7 мс | 55.4 мс (1.02x быстрее) |
bench_thread_pool | 706 мкс | 725 мкс (1.03x медленнее) |
chameleon | 6.03 мс | 5.89 мс (1.02x быстрее) |
chaos | 57.6 мс | 57.1 мс (1.01x быстрее) |
comprehensions | 14.5 мкс | 14.6 мкс (незначительно) |
coroutines | 21.4 мс | 17.3 мс (1.24x быстрее) |
coverage | 25.5 мс | 33.5 мс (1.31x медленнее) |
create_gc_cycles | 635 мкс | 637 мкс (1.00x медленнее) |
crypto_pyaes | 61.8 мс | 62.7 мс (1.01x медленнее) |
dask | 269 мс | 263 мс (1.02x быстрее) |
deepcopy | 245 мкс | 253 мкс (1.03x медленнее) |
deepcopy_memo | 28.3 мкс | 28.9 мкс (1.02x медленнее) |
deepcopy_reduce | 2.19 мкс | 2.20 мкс (незначительно) |
deltablue | 4.00 мс | 4.27 мс (1.07x медленнее) |
django_template | 28.4 мс | 28.2 мс (1.01x быстрее) |
docutils | 1.57 с | 1.63 с (1.04x медленнее) |
fannkuch | 263 мс | 256 мс (незначительно) |
float | 66.6 мс | 66.7 мс (незначительно) |
gc_traversal | 1.20 мс | 1.20 мс (незначительно) |
generators | 32.8 мс | 41.8 мс (1.27x медленнее) |
genshi_text | 19.1 мс | 18.7 мс (1.02x быстрее) |
genshi_xml | 140 мс | 132 мс (незначительно) |
hexiom | 5.26 мс | 5.46 мс (1.04x медленнее) |
html5lib | 41.6 мс | 39.3 мс (1.06x быстрее) |
json_dumps | 8.28 мс | 8.09 мс (1.02x быстрее) |
json_loads | 14.0 мкс | 13.3 мкс (1.05x быстрее) |
logging_format | 6.22 мкс | 6.74 мкс (1.08x медленнее) |
logging_silent | 104 нс | 102 нс (незначительно) |
logging_simple | 5.78 мкс | 6.36 мкс (1.10x медленнее) |
mako | 9.41 мс | 9.04 мс (1.04x быстрее) |
mdp | 1.77 с | 1.68 с (1.05x быстрее) |
meteor_contest | 63.7 мс | 65.9 мс (1.04x медленнее) |
nbody | 80.7 мс | 81.8 мс (1.01x медленнее) |
nqueens | 57.7 мс | 61.3 мс (1.06x медленнее) |
pathlib | 80.5 мс | 81.3 мс (1.01x медленнее) |
pickle | 6.98 мкс | 6.86 мкс (1.02x быстрее) |
pickle_dict | 17.9 мкс | 18.5 мкс (1.03x медленнее) |
pickle_list | 2.49 мкс | 2.58 мкс (1.04x медленнее) |
pickle_pure_python | 250 мкс | 258 мкс (1.03x медленнее) |
pidigits | 139 мс | 136 мс (1.02x быстрее) |
pprint_pformat | 900 мс | 1.17 с (1.30x медленнее) |
pyflate | 394 мс | 387 мс (1.02x быстрее) |
python_startup | 17.7 мс | 17.4 мс (1.01x быстрее) |
python_startup_no_site | 13.2 мс | 13.2 мс (незначительно) |
raytrace | 267 мс | 275 мс (1.03x медленнее) |
regex_compile | 86.8 мс | 89.5 мс (1.03x медленнее) |
regex_dna | 106 мс | 111 мс (1.04x медленнее) |
regex_effbot | 1.81 мс | 1.78 мс (1.01x быстрее) |
regex_v8 | 14.9 мс | 15.0 мс (1.01x медленнее) |
richards | 38.0 мс | 41.7 мс (1.10x медленнее) |
richards_super | 48.5 мс | 50.9 мс (1.05x медленнее) |
scimark_fft | 205 мс | 223 мс (1.09x медленнее) |
scimark_lu | 85.4 мс | 94.3 мс (1.10x медленнее) |
scimark_monte_carlo | 57.9 мс | 58.1 мс (незначительно) |
scimark_sor | 105 мс | 105 мс (незначительно) |
scimark_sparse_mat_mult | 3.04 мс | 3.47 мс (1.14x медленнее) |
spectral_norm | 79.7 мс | 82.1 мс (1.03x медленнее) |
sqlalchemy_declarative | 72.4 мс | 78.0 мс (1.08x медленнее) |
sqlalchemy_imperative | 8.55 мс | 8.51 мс (1.01x быстрее) |
sqlglot_normalize | 181 мс | 198 мс (1.10x медленнее) |
sqlglot_optimize | 34.6 мс | 37.1 мс (1.07x медленнее) |
sqlglot_parse | 1.20 мс | 1.12 мс (1.07x быстрее) |
sqlglot_transpile | 1.36 мс | 1.33 мс (1.03x быстрее) |
sqlite_synth | 1.68 мкс | 1.54 мкс (1.09x быстрее) |
sympy_expand | 261 мс | 265 мс (1.02x медленнее) |
sympy_integrate | 12.8 мс | 12.7 мс (1.01x быстрее) |
sympy_str | 159 мс | 162 мс (1.02x медленнее) |
sympy_sum | 87.4 мс | 91.4 мс (1.05x медленнее) |
telco | 3.89 мс | 3.80 мс (1.02x быстрее) |
tomli_loads | 1.57 с | 1.69 с (1.07x медленнее) |
tornado_http | 101 мс | 98.2 мс (1.03x быстрее) |
typing_runtime_protocols | 301 мкс | 314 мкс (1.04x медленнее) |
unpack_sequence | 35.0 нс | 39.3 нс (1.12x медленнее) |
unpickle | 7.90 мкс | 8.59 мкс (1.09x медленнее) |
unpickle_list | 2.87 мкс | 2.87 мкс (незначительно) |
unpickle_pure_python | 171 мкс | 176 мкс (1.03x медленнее) |
xml_etree_generate | 53.7 мс | 55.2 мс (1.03x медленнее) |
xml_etree_iterparse | 55.4 мс | 57.6 мс (1.04x медленнее) |
xml_etree_parse | 84.1 мс | 83.4 мс (1.01x быстрее) |
xml_etree_process | 42.9 мс | 44.4 мс (1.04x медленнее) |
Результат (среднее геометрическое) | 1.02x медленнее |
Анализ измерений показывает, что Python 3.10 имеет лучшие результаты по производительности по сравнению с Python 3.9 в следующих тестах: coroutines (1.24x быстрее), sqlite_synth (1.09x быстрее), sqlglot_parse (1.07x быстрее). Однако можете заметить падение производительности в некоторых тестах, особенно в coverage (1.31x медленнее), pprint_pformat (1.30x медленнее), generators (1.27x медленнее).
Кроме того, можно обнаружить различия в производительности между Python 3.10 и Python 3.9 на основе тестов, принадлежащих определенным группам. В таблице ниже показано среднее геометрическое для тестов из отдельных групп для Python 3.10 по сравнению с Python 3.9.
Группа тестов | Python 3.10 по сравнению с Python 3.9 |
---|---|
apps | 1.01x быстрее |
math | 1.00x быстрее |
regex | 1.02x медленнее |
serialize | 1.02x медленнее |
startup | 1.01x быстрее |
template | 1.02x быстрее |
Процессор Intel Core 13-го поколения для мобильных ПК
Во второй части тестирования участвовал мини-ПК с процессором Intel Core i3-1315U (который также используется в ноутбуках), оперативной памятью DDR4 и накопителем M.2 PCIe Gen4 NVMe. В таблице ниже показаны результаты 88 тестов, выполненных с использованием Python 3.9 (в качестве эталона) и Python 3.10 на этом устройстве.
Название теста | Python 3.9 | Python 3.10 |
---|---|---|
2to3 | 281 мс | 282 мс (незначительно) |
async_generators | 249 мс | 254 мс (1.02x медленнее) |
async_tree_cpu_io_mixed | 708 мс | 716 мс (1.01x медленнее) |
async_tree_io | 1.17 с | 1.16 с (1.01x быстрее) |
async_tree_memoization | 583 мс | 593 мс (1.02x медленнее) |
async_tree_none | 479 мс | 486 мс (незначительно) |
asyncio_tcp | 912 мс | 981 мс (1.08x медленнее) |
asyncio_tcp_ssl | 2.24 с | 2.43 с (1.08x медленнее) |
bench_mp_pool | 92.4 мс | 89.5 мс (1.03x быстрее) |
bench_thread_pool | 1.20 мс | 1.24 мс (незначительно) |
chameleon | 6.93 мс | 6.47 мс (1.07x быстрее) |
chaos | 69.2 мс | 68.8 мс (незначительно) |
comprehensions | 16.3 мкс | 18.4 мкс (1.13x медленнее) |
coroutines | 25.4 мс | 18.0 мс (1.42x быстрее) |
coverage | 25.2 мс | 33.0 мс (1.31x медленнее) |
create_gc_cycles | 883 мкс | 888 мкс (незначительно) |
crypto_pyaes | 70.5 мс | 70.3 мс (незначительно) |
dask | 436 мс | 431 мс (1.01x быстрее) |
deepcopy | 288 мкс | 293 мкс (1.02x медленнее) |
deepcopy_memo | 31.2 мкс | 32.0 мкс (1.03x медленнее) |
deepcopy_reduce | 2.52 мкс | 2.47 мкс (1.02x быстрее) |
deltablue | 4.50 мс | 4.71 мс (1.05x медленнее) |
django_template | 34.6 мс | 33.3 мс (1.04x быстрее) |
docutils | 2.08 с | 2.19 с (1.05x медленнее) |
fannkuch | 289 мс | 306 мс (1.06x медленнее) |
float | 73.1 мс | 70.0 мс (1.04x быстрее) |
gc_traversal | 1.69 мс | 1.69 мс (незначительно) |
generators | 34.4 мс | 36.0 мс (1.05x медленнее) |
genshi_text | 21.1 мс | 21.6 мс (1.02x медленнее) |
genshi_xml | 157 мс | 153 мс (1.03x медленнее) |
hexiom | 5.86 мс | 6.22 мс (1.06x медленнее) |
html5lib | 56.1 мс | 56.0 мс (незначительно) |
json_dumps | 8.96 мс | 9.76 мс (1.09x медленнее) |
json_loads | 16.5 мкс | 16.0 мкс (1.03x быстрее) |
logging_format | 7.50 мкс | 8.15 мкс (1.09x медленнее) |
logging_silent | 110 нс | 106 нс (1.04x быстрее) |
logging_simple | 6.97 мкс | 7.60 мкс (1.09x медленнее) |
mako | 10.5 мс | 9.78 мс (1.07x быстрее) |
mdp | 1.99 с | 1.96 с (1.02x быстрее) |
meteor_contest | 81.9 мс | 83.7 мс (1.02x медленнее) |
nbody | 81.5 мс | 80.5 мс (незначительно) |
nqueens | 69.8 мс | 75.9 мс (1.09x медленнее) |
pathlib | 74.6 мс | 77.5 мс (1.04x медленнее) |
pickle | 7.89 мкс | 7.85 мкс (незначительно) |
pickle_dict | 20.0 мкс | 20.9 мкс (1.04x медленнее) |
pickle_list | 3.01 мкс | 3.11 мкс (1.03x медленнее) |
pickle_pure_python | 292 мкс | 302 мкс (1.04x медленнее) |
pidigits | 170 мс | 167 мс (1.02x быстрее) |
pprint_pformat | 1.05 с | 1.39 с (1.33x медленнее) |
pyflate | 471 мс | 461 мс (1.02x быстрее) |
python_startup | 25.1 мс | 25.0 мс (незначительно) |
python_startup_no_site | 19.8 мс | 19.4 мс (1.02x быстрее) |
raytrace | 301 мс | 320 мс (1.06x медленнее) |
regex_compile | 112 мс | 118 мс (1.05x медленнее) |
regex_dna | 147 мс | 148 мс (незначительно) |
regex_effbot | 1.78 мс | 1.88 мс (1.06x медленнее) |
regex_v8 | 16.5 мс | 17.0 мс (1.03x медленнее) |
richards | 41.1 мс | 46.6 мс (1.13x медленнее) |
richards_super | 51.7 мс | 58.5 мс (1.13x медленнее) |
scimark_fft | 211 мс | 214 мс (1.01x медленнее) |
scimark_lu | 87.0 мс | 93.7 мс (1.08x медленнее) |
scimark_monte_carlo | 65.7 мс | 64.1 мс (1.03x быстрее) |
scimark_sor | 111 мс | 114 мс (1.03x медленнее) |
scimark_sparse_mat_mult | 2.95 мс | 2.97 мс (незначительно) |
spectral_norm | 86.0 мс | 84.8 мс (1.02x быстрее) |
sqlalchemy_declarative | 115 мс | 125 мс (1.09x медленнее) |
sqlalchemy_imperative | 13.3 мс | 13.1 мс (1.02x быстрее) |
sqlglot_normalize | 207 мс | 234 мс (1.13x медленнее) |
sqlglot_optimize | 41.0 мс | 44.8 мс (1.09x медленнее) |
sqlglot_parse | 1.38 мс | 1.40 мс (1.01x медленнее) |
sqlglot_transpile | 1.62 мс | 1.67 мс (1.03x медленнее) |
sqlite_synth | 2.26 мкс | 2.16 мкс (1.05x быстрее) |
sympy_expand | 352 мс | 367 мс (1.04x медленнее) |
sympy_integrate | 16.7 мс | 17.4 мс (1.04x медленнее) |
sympy_str | 212 мс | 223 мс (1.05x медленнее) |
sympy_sum | 115 мс | 124 мс (1.08x медленнее) |
telco | 4.38 мс | 4.42 мс (1.01x медленнее) |
tomli_loads | 1.75 с | 1.89 с (1.08x медленнее) |
tornado_http | 142 мс | 140 мс (1.02x быстрее) |
typing_runtime_protocols | 361 мкс | 378 мкс (1.05x медленнее) |
unpack_sequence | 40.9 нс | 44.9 нс (1.10x медленнее) |
unpickle | 9.05 мкс | 9.21 мкс (незначительно) |
unpickle_list | 2.99 мкс | 3.16 мкс (1.06x медленнее) |
unpickle_pure_python | 199 мкс | 209 мкс (1.05x медленнее) |
xml_etree_generate | 59.5 мс | 61.8 мс (1.04x медленнее) |
xml_etree_iterparse | 69.7 мс | 74.4 мс (1.07x медленнее) |
xml_etree_parse | 113 мс | 114 мс (незначительно) |
xml_etree_process | 54.6 мс | 49.5 мс (1.10x быстрее) |
Результат (среднее геометрическое) | 1.03x медленнее |
Анализ измерений показывает, что Python 3.10 имеет лучшие результаты по производительности по сравнению с Python 3.9 в следующих тестах: coroutines (1.42x быстрее), xml_etree_process (1.10x быстрее), chameleon (1.07x быстрее). Однако можете заметить падение производительности в некоторых тестах, особенно в pprint_pformat (1.33x медленнее), coverage (1.31x медленнее), comprehensions (1.13x медленнее).
Кроме того, можно обнаружить различия в производительности между Python 3.10 и Python 3.9 на основе тестов, принадлежащих определенным группам. В таблице ниже показано среднее геометрическое для тестов из отдельных групп для Python 3.10 по сравнению с Python 3.9.
Группа тестов | Python 3.10 по сравнению с Python 3.9 |
---|---|
apps | 1.01x быстрее |
asyncio | 1.01x медленнее |
math | 1.03x быстрее |
regex | 1.04x медленнее |
serialize | 1.03x медленнее |
startup | 1.01x быстрее |
template | 1.01x быстрее |