Я имел неосторожность обращать пристальное вынимание на производительность языка, но этого больше не повторится. Для работы, которую я делаю, производительность разработки гораздо более значима, чем производительность самого языка. Меня совершенно не беспокоит, что Python 3 чуть-чуть медленнее, чем последний 2.x релиз, который используется в продакшн(2.5). История показала, что разработчики Python достаточно хороши в оптимизации и теперь, когда язык стабилизировался, мы можем рассчитывать на большое количество оптимизаций в 3-ей ветке.
Python 3 на сегодняшний день не такой уж медленный. Для работы, которой я занимаюсь — разработка веб приложений — я нахожу что первый релиз Python 3 по грубым оценкам эквивалентен Python 2.5.x, и это гораздо более важно для меня, чем оценка при помощи pystone или какие-либо другие абстрактные измерения.
Что касается pystone, вот результаты на старой однопроцессорной Unix-машине, которую я использую:
Обязывающий(хотя и грубый) тест веб проложения — получение вики-страницы, на все той же старой машине, в то время как gvim и некоторые другие приложения так же запущены.
Данный тест базируется на тесте шаблона, включенном в пакет Genshi и использует модуль timeit, считая среднее значение времени 10 запусков создания большой html таблицы используя следующий Qpy шаблон:
Можно увидеть, что Qpy не единственный модуль, который получил прирост в производительности в Python 2.6 и Python 3.0, и я уверен, что будут приложены усилия по оптимизации, чтобы вернуть производительность некоторых модулей на прежний уровень.
Существуют веские причины по которым кто-то может выбрать Python 2.x вместо Python 3.0, но производительность не будет одной из них для большинства разработчиков.
Python 3 на сегодняшний день не такой уж медленный. Для работы, которой я занимаюсь — разработка веб приложений — я нахожу что первый релиз Python 3 по грубым оценкам эквивалентен Python 2.5.x, и это гораздо более важно для меня, чем оценка при помощи pystone или какие-либо другие абстрактные измерения.
Тест #1: pystone
Что касается pystone, вот результаты на старой однопроцессорной Unix-машине, которую я использую:
$ python2.5 /usr/local/lib/python2.5/test/pystone.py
Pystone(1.1) time for 50000 passes = 1.75781
This machine benchmarks at 28444.4 pystones/second
$ python2.6 /usr/local/lib/python2.6/test/pystone.py
Pystone(1.1) time for 50000 passes = 1.46094
This machine benchmarks at 34224.6 pystones/second
$ python3.0 /usr/local/lib/python3.0/test/pystone.py
Pystone(1.1) time for 50000 passes = 1.85938
This machine benchmarks at 26890.8 pystones/second
Тест #2: веб приложение
Обязывающий(хотя и грубый) тест веб проложения — получение вики-страницы, на все той же старой машине, в то время как gvim и некоторые другие приложения так же запущены.
ab -n 1000 127.0.0.1:8002/qwiki/foo/
Req/second
Python 2.5 174.79
Python 2.6 204.29
Python 3.0 173.49
Тест #3: шаблон веб фреймворка
Данный тест базируется на тесте шаблона, включенном в пакет Genshi и использует модуль timeit, считая среднее значение времени 10 запусков создания большой html таблицы используя следующий Qpy шаблон:
# this is to provide a Qpy template for use in comparison
# with the Genshi "bigtable" benchmark.
table = [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10)
for x in range(1000)]
def qpy_template:xml():
'<table>'
for row in table:
'<tr>'
for col in row.values():
'<td>%s</td>' % col
'</tr>'
'</table>'
Можно увидеть, что Qpy не единственный модуль, который получил прирост в производительности в Python 2.6 и Python 3.0, и я уверен, что будут приложены усилия по оптимизации, чтобы вернуть производительность некоторых модулей на прежний уровень.
$ python2.5 bigtable.py
ElementTree 736.43 ms
cStringIO 36.46 ms
StringIO 141.10 ms
list concat 22.73 ms
Qpy Template 129.35 ms
$ python2.6 bigtable.py
ElementTree 656.99 ms
cStringIO 30.85 ms
StringIO 131.95 ms
list concat 16.37 ms
Qpy Template 39.54 ms
$ python3.0 bigtable.py
ElementTree 449.60 ms
StringIO 138.03 ms
list concat 21.70 ms
Qpy Template 36.36 ms
Вывод
Существуют веские причины по которым кто-то может выбрать Python 2.x вместо Python 3.0, но производительность не будет одной из них для большинства разработчиков.