04.02.2019       Выпуск 268 (04.02.2019 - 10.02.2019)       Статьи

Микрооптимизации для Python 3.8

Работа над повышением производительности Питона продолжается.

Читать>>




Экспериментальная функция:

Ниже вы видите текст статьи по ссылке. По нему можно быстро понять ссылка достойна прочтения или нет

Просим обратить внимание, что текст по ссылке и здесь может не совпадать.

Микрооптимизации для Python 3.8

Работа над повышением производительности Питона продолжается.

В январе

Сергей Сторчака

в рамках задачи

bpo35582

в функциях, использующих только позиционные аргументы, заменил

_PyArg_ParseStack

и

PyArg_ParseTuple

на обработку аргументов внутри самих функций.

Модификация позволила сэкономить на разборе форматных строк и вызовах нескольких уровней функций (что в свою очередь экономит Си-стек). Несмотря на то, что речь идёт о выигрыше в наносекунды, полученные результаты не могут не радовать. Вот замеры прироста производительности некоторых функций после оптимизации:

ВызовПрирост
format('abc')35%
'abc'.replace('x', 'y')37%
'abc'.ljust(5)21%
'abc'.strip()11%
d = {'a': 1}; d.get('a')7%
(1, 2, 3).index(2)38%
a = [1, 2, 3]; a.index(2)25%
math.pow(0.5, 2.0)27%
divmod(5, 2)7%
hasattr(1, 'numerator')12%
getattr(1, 'numerator')10%
isinstance(1, int)14%
gcd(6, 10)10%
add(1, 2)20%
iter(())32%
it = iter([]); next(it, None)17%
f = attrgetter('numerator'); f(1)11%
f = methodcaller('conjugate'); f(1)7%

Стоит поблагодарить Сергея за эту и другую работу, которую он проделал для улучшения CPython.

Кроме того, необходимо также пожелать ему скорейшего

восстановления зрения

.

Спасибо и здоровья!





Разместим вашу рекламу

Пиши: mail@pythondigest.ru

Нашли опечатку?

Выделите фрагмент и отправьте нажатием Ctrl+Enter.

Система Orphus