Python 3.14 vs 3.13 / 3.12 / 3.11 / 3.10 – performance testing (video)

In this article, the performance test results of Python version 3.14 are presented and compared with the results obtained for earlier releases — 3.13, 3.12, 3.11, and 3.10. A total of over 100 diverse benchmark tests were conducted, covering both computational operations and tasks related to data processing, input/output operations, and application startup.

The tests were performed using the pyperformance 1.12.0 library on computers running Windows 11. Two main types of hardware platforms were included in the study: desktop configurations with AMD Ryzen 7000 series processors, and devices based on 13th-generation Intel Core processors, representing laptops and mini PCs. The tested Python versions were: Python 3.14.0, Python 3.13.9, Python 3.12.10, Python 3.11.9, and Python 3.10.11 (all 64-bit builds).

To ensure objective results, each Python version was installed from scratch, without any pre-existing libraries or settings, using the following configuration options:

AMD Ryzen 7000 Series Desktop Processor

The first part of the tests was conducted on a desktop computer equipped with an AMD Ryzen 9 7900 processor, DDR5 memory, and an M.2 PCIe Gen4 NVMe drive. The table below presents the results of 111 benchmark tests performed using different Python versions on this device (JS – time unit; the best results for each individual test are highlighted in green).

Benchmark TU Python 3.14 Python 3.13 Python 3.12 Python 3.11 Python 3.10
2to3 ms 214 213 220 210 244
async_generators ms 257 250 244 194 233
async_tree_cpu_io_mixed ms 363 409 522 578 682
async_tree_cpu_io_mixed_tg ms 360 426 517 516
async_tree_eager ms 71.79 79.59 70.63
async_tree_eager_cpu_io_mixed ms 297 305 306
async_tree_eager_cpu_io_mixed_tg ms 332 372 428
async_tree_eager_io ms 461 652 944
async_tree_eager_io_tg ms 467 668 995
async_tree_eager_memoization ms 155 182 171
async_tree_eager_memoization_tg ms 202 241 308
async_tree_eager_tg ms 152 181 215
async_tree_io ms 453 576 855 959 1312
async_tree_io_tg ms 438 597 890 929
async_tree_memoization ms 227 301 402 418 564
async_tree_memoization_tg ms 223 310 379 400
async_tree_none ms 192 242 309 374 471
async_tree_none_tg ms 181 220 295 296
asyncio_tcp ms 493 488 464 666 751
asyncio_tcp_ssl ms 1307 1320 1271 1888 2061
asyncio_websockets ms 140 457 456 458 457
bench_mp_pool ms 98.28 93.27 98.2 87.71 87.0
bench_thread_pool μs 725 692 721 716 763
bpe_tokeniser ms 2858 2931 3050 2700 2942
chameleon ms 9.65 10.25 8.94 8.93 10.7
chaos ms 42.32 41.84 43.58 45.69 59.24
comprehensions μs 10.9 10.8 13.5 13.7 14.8
connected_components ms 358 356 344 401
coroutines ms 16.1 15.3 15.17 16.53 18.16
coverage ms 51.5 48.7 28.21 37.05 35.0
create_gc_cycles μs 1041 970 989 886 928
crypto_pyaes ms 48.56 50.06 49.7 46.97 63.79
dask ms 714 718 472
deepcopy μs 170 231 217 224 261
deepcopy_memo μs 19.3 26.1 24.9 24.6 29.8
deepcopy_reduce μs 1.86 2.19 2.01 2.02 2.28
deltablue μs 2349 2330 2466 2623 4314
django_template ms 23.95 24.08 22.59 22.36 28.56
docutils ms 1446 1442 1438 1390 1654
dulwich_log ms 46.52 46.18 49.48 49.12 58.44
fannkuch ms 253 255 245 243 260
float ms 53.54 55.44 58.5 53.3 67.65
gc_traversal μs 1798 1647 1678 1606 1483
generators ms 19.92 22.27 23.57 41.18 41.94
genshi_text ms 15.58 16.75 15.25 16.37 18.99
genshi_xml ms 34.67 36.37 33.81 37.11 41.23
go ms 82.93 98.0 89.13 93.43 134
hexiom μs 4574 4423 4379 4273 5497
html5lib ms 32.33 34.0 32.66 31.5 40.11
json_dumps μs 6555 6166 5822 7672 8130
json_loads μs 14.3 14.3 14.2 12.9 14.0
k_core ms 1598 1666 1859 2110
logging_format μs 6.07 6.24 6.52 6.44 6.87
logging_silent μs 0.069 0.069 0.067 0.07 0.102
logging_simple μs 5.66 5.76 6.12 5.97 6.48
mako μs 7561 7040 7471 7299 8974
many_optionals μs 636 367 371 363 404
mdp ms 806 1610 1627 1636 1656
meteor_contest ms 66.3 66.73 64.24 65.59 65.33
nbody ms 83.73 85.28 81.67 73.06 82.72
nqueens ms 61.37 59.21 59.94 60.22 62.37
pathlib ms 230 227 229 215 216
pickle μs 8.03 7.65 7.47 6.72 6.95
pickle_dict μs 20.5 19.2 19.7 18.8 19.2
pickle_list μs 3.02 2.82 2.88 2.65 2.62
pickle_pure_python μs 208 193 194 193 260
pidigits ms 130 133 135 136 137
pprint_pformat ms 990 1033 989 971 1184
pprint_safe_repr ms 484 507 482 471 573
pyflate ms 311 309 312 288 396
python_startup ms 33.02 32.41 32.79 30.72 31.73
python_startup_no_site ms 32.77 33.77 34.8 33.93 34.62
raytrace ms 187 184 195 199 275
regex_compile ms 71.26 76.41 79.09 75.86 91.16
regex_dna ms 109 111 100 103 110
regex_effbot μs 1594 1718 1526 1705 1806
regex_v8 ms 14.72 15.42 13.85 14.12 15.46
richards ms 30.26 31.41 28.18 30.75 43.44
richards_super ms 33.92 35.06 31.89 37.87 52.98
scimark_fft ms 208 211 214 212 223
scimark_lu ms 71.85 71.51 72.29 67.29 94.88
scimark_monte_carlo ms 47.42 47.65 46.3 44.49 59.67
scimark_sor ms 87.64 87.03 88.96 78.85 107
scimark_sparse_mat_mult μs 3402 3179 3335 3247 3568
shortest_path ms 369 364 355 407
spectral_norm ms 72.52 77.34 74.44 73.85 83.36
sphinx ms 582 595 610 625
sqlalchemy_declarative ms 60.46 64.8 67.55 68.82 77.67
sqlalchemy_imperative μs 6717 7188 7047 6966 8618
sqlglot_v2_normalize ms 67.45 70.95 67.49 68.99 79.56
sqlglot_v2_optimize ms 32.12 33.7 32.72 32.44 37.23
sqlglot_v2_parse μs 833 819 846 884 1139
sqlglot_v2_transpile μs 1008 1006 1030 1063 1349
sqlite_synth μs 1.47 1.53 1.53 1.36 1.53
subparsers ms 46.02 18.28 45.45 40.11 45.82
sympy_expand ms 249 253 242 247 270
sympy_integrate ms 11.06 11.62 11.44 11.59 12.75
sympy_str ms 146 150 150 151 164
sympy_sum ms 75.75 79.31 81.49 84.4 91.92
telco μs 4712 4797 4450 3925 3844
tomli_loads ms 1498 1497 1521 1418 1702
tornado_http ms 97.62 101 102 102 117
typing_runtime_protocols μs 103 107 101 297 314
unpack_sequence μs 0.046 0.045 0.05 0.037 0.047
unpickle μs 9.03 9.21 9.02 7.81 8.57
unpickle_list μs 2.89 2.63 3.11 2.53 2.98
unpickle_pure_python μs 151 148 146 148 178
xml_etree_generate ms 58.13 59.15 59.31 52.36 58.35
xml_etree_iterparse ms 54.59 55.84 57.21 56.51 57.17
xml_etree_parse ms 72.94 77.09 77.18 81.18 81.96
xml_etree_process ms 40.8 41.25 40.8 37.97 45.27

13th Gen Intel Core Mobile Processor

The second part of the tests was carried out on a mini PC equipped with an Intel Core i3-1315U processor (also commonly used in laptops), DDR4 memory, and an M.2 PCIe Gen4 NVMe drive. The table below shows the results of 110 benchmark tests performed using different Python versions on this device (TU – time unit; the best results for each individual test are highlighted in green).

Benchmark TU Python 3.14 Python 3.13 Python 3.12 Python 3.11 Python 3.10
2to3 ms 270 267 260 257 293
async_generators ms 262 247 253 194 253
async_tree_cpu_io_mixed ms 376 442 567 691 705
async_tree_cpu_io_mixed_tg ms 373 451 573 600
async_tree_eager ms 81.44 91.51 79.77
async_tree_eager_cpu_io_mixed ms 352 348 360
async_tree_eager_cpu_io_mixed_tg ms 363 401 486
async_tree_eager_io ms 462 610 813
async_tree_eager_io_tg ms 454 600 819
async_tree_eager_memoization ms 174 212 205
async_tree_eager_memoization_tg ms 228 256 349
async_tree_eager_tg ms 185 195 241
async_tree_io ms 448 580 808 904 1146
async_tree_io_tg ms 452 579 817 880
async_tree_memoization ms 253 321 432 476 581
async_tree_memoization_tg ms 246 323 404 448
async_tree_none ms 201 262 342 445 476
async_tree_none_tg ms 203 233 330 346
asyncio_tcp ms 603 566 588 788 890
asyncio_tcp_ssl ms 1616 1588 1639 2881 2890
asyncio_websockets ms 184 356 359 379 364
bench_mp_pool ms 124 112 121 118 107
bench_thread_pool μs 1183 1043 1068 1209 1227
bpe_tokeniser ms 5177 5132 5698 5154 5585
chameleon ms 11.3 11.46 9.81 11.38 12.32
chaos ms 46.7 46.74 47.61 57.35 67.86
comprehensions μs 12.9 12.9 15.4 17.8 18.6
connected_components ms 373 376 346 389
coroutines ms 16.19 14.95 15.42 18.08 18.07
coverage ms 161 154 30.96 41.75 33.08
create_gc_cycles μs 1750 1438 1492 1351 1306
crypto_pyaes ms 57.28 52.81 53.37 54.63 70.81
dask ms 2241 2105 1010
deepcopy μs 198 270 252 273 297
deepcopy_memo μs 20.5 28.5 26.5 30.3 32.4
deepcopy_reduce μs 2.12 2.5 2.26 2.57 2.52
deltablue μs 2408 2323 2290 3185 4649
django_template ms 27.55 27.14 24.87 31.1 33.28
docutils ms 1906 1812 1810 1998 2416
fannkuch ms 283 296 272 326 311
float ms 55.03 58.99 59.25 65.3 68.68
gc_traversal μs 3107 2670 2678 2520 2234
generators ms 23.72 23.19 22.51 38.68 35.96
genshi_text ms 18.09 18.19 16.39 20.33 21.97
genshi_xml ms 40.07 40.3 36.33 46.53 45.24
go ms 91.76 106 95.02 120 155
hexiom μs 4790 4690 4456 5253 6165
html5lib ms 44.18 47.6 43.86 47.39 56.63
json_dumps μs 7253 7070 6797 9295 9358
json_loads μs 16.8 16.8 17.2 17.7 16.1
k_core ms 3036 3092 3278 4010
logging_format μs 7.36 7.0 7.15 8.3 8.07
logging_silent μs 0.068 0.07 0.065 0.085 0.107
logging_simple μs 6.51 6.47 6.6 7.5 7.58
mako μs 7445 7232 7340 8088 9625
many_optionals μs 1009 612 638 615 690
mdp ms 972 1725 1550 2108 1922
meteor_contest ms 86.77 86.67 84.01 85.62 84.9
nbody ms 81.58 81.58 78.3 81.58 79.14
nqueens ms 71.84 68.81 66.93 73.6 76.85
pathlib ms 87.59 89.06 84.07 76.32 74.25
pickle μs 9.43 9.35 8.66 8.15 8.64
pickle_dict μs 23.5 24.2 21.5 23.3 21.4
pickle_list μs 4.15 3.68 3.29 3.37 3.41
pickle_pure_python μs 251 222 220 251 311
pidigits ms 172 168 168 168 167
pprint_pformat ms 1156 1206 1146 1328 1397
pprint_safe_repr ms 591 615 563 640 682
pyflate ms 358 368 343 379 461
python_startup ms 29.36 28.76 27.6 33.83 25.44
python_startup_no_site ms 22.04 21.69 21.0 22.41 20.49
raytrace ms 230 212 212 254 314
regex_compile ms 91.82 103 96.15 114 117
regex_dna ms 141 149 130 137 147
regex_effbot μs 1903 1767 1655 1817 1859
regex_v8 ms 17.47 17.05 15.38 16.79 17.24
richards ms 32.25 34.28 28.18 37.17 44.82
richards_super ms 35.45 38.53 31.95 47.73 57.58
scimark_fft ms 211 215 205 226 216
scimark_lu ms 64.2 74.67 66.77 77.47 93.73
scimark_monte_carlo ms 48.13 52.98 48.27 54.87 65.04
scimark_sor ms 87.8 94.79 88.79 96.92 115
scimark_sparse_mat_mult μs 3050 2820 2884 3062 2957
shortest_path ms 415 411 382 425
spectral_norm ms 72.74 73.3 72.23 82.72 85.23
sphinx ms 756 770 754 886
sqlalchemy_declarative ms 93.21 97.23 98.18 110 124
sqlalchemy_imperative ms 11.78 11.26 10.42 12.62 13.32
sqlglot_v2_normalize ms 84.92 82.53 77.66 94.7 95.5
sqlglot_v2_optimize ms 41.05 39.79 37.6 44.96 45.47
sqlglot_v2_parse μs 938 961 925 1150 1388
sqlglot_v2_transpile μs 1189 1214 1152 1369 1685
sqlite_synth μs 1.95 1.92 2.0 1.96 2.16
subparsers ms 70.49 28.55 57.79 53.36 59.32
sympy_expand ms 352 340 309 347 368
sympy_integrate ms 14.15 15.02 14.24 15.49 17.25
sympy_str ms 194 207 191 210 226
sympy_sum ms 100 105 100 116 126
telco μs 5372 5950 4830 4558 4452
tomli_loads ms 1547 1672 1556 1576 1932
tornado_http ms 105 107 108 111 139
typing_runtime_protocols μs 123 131 117 369 382
unpack_sequence μs 0.042 0.045 0.044 0.05 0.044
unpickle μs 9.7 10.7 9.7 8.84 9.55
unpickle_list μs 3.08 3.08 3.3 2.92 3.3
unpickle_pure_python μs 153 159 147 173 201
xml_etree_generate ms 64.28 66.97 65.02 60.18 63.12
xml_etree_iterparse ms 73.86 75.22 73.92 76.54 80.54
xml_etree_parse ms 102 113 108 115 121
xml_etree_process ms 44.46 47.58 43.16 42.62 51.4

Relative results

The video below presents relative performance results in the form of charts for individual groups of tests. The execution times obtained with Python version 3.14 were used as the reference point (100%).

More information can be found on the website: python.lewoniewski.info

Polski
English
Русский