Работа над повышением производительности Питона продолжается.
В январе Сергей Сторчака в рамках задачи 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.
Кроме того, необходимо также пожелать ему скорейшего восстановления зрения.

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

Категории

Интерпретатор

На заметку
Зарегистрированные пользователи могут добавлять Видео.