PyPy , на которую указывает разработчик Psyco, не является удобной заменой Psyco только для некоторого увеличения скорости в коде узкого места.Это еще одна экосистема.
Использование PyPy имеет много последствий, поднимает много вопросов совместимости для более крупных проектов и является повсеместным решением: это означает переход на совершенно иную реализацию Python вдали от капот и уровня обеспечения качества Python.лидер разработчиков.PyPy довольно чрезмерно раскручен для его увеличения скорости в большинстве реальных проектов слова.Первоначальные казни занимают много времени.Объем памяти огромен и безобразен.Представленные тесты «выбраны».И всегда есть какая-то библиотека, необходимая для проекта, или проблема с GUI / Server / IDE / Debugging, которая полностью останавливает показ или увеличивает время разработки и отладки.Прирост скорости трудно предсказать, и вряд ли его можно настроить с помощью фокусировки.Ничего приятного в этом не ощущать.
На сегодняшний день наиболее эффективными альтернативами для ускорения кода узкого места в CPython являются Cython и numba .(Есть и другие «mayflies» здесь )
Numba , библиотека JIT-компилятора для CPython (как и Psyco), фокусируется на числовом коде.Он обеспечивает впечатляющий прирост скорости (10..200x, больше, чем psyco / PyPy), просто добавив функциональный декоратор jit
в функции узкого места.И это особенно быстро и в сочетании с numpy
массивами из коробки!(в отличие от Psyco);Однако до сих пор Numba ничего не делает или даже сильно тормозит другой нормальный код Python, который в основном работает с атрибутами объектов, строками, общими списками, диктовками и т. Д. (Худшее замечено: скорость 0,04x, хуже, чем у Psyco).В отличие от Psyco, Numba - это огромная установка и медленный импорт (рисует нолик)Но в качестве альтернативы он позволяет создавать предварительно скомпилированные статические модули из выбранных функций, которые затем больше не нуждаются в установке numba для развертывания (аналогично Cython).
Cython ,статический компилятор смешанного языка Python & C (супер-набор языка Python), который использует конвейер компилятора C и производит модули DLL, обычно используется путем рефакторинга некоторых функций узкого места в отдельный модуль.Но даже когда неизмененные большие модули Python скомпилированы в , это обычно дает увеличение скорости примерно в 2 раза, просто так «бесплатно»!Тем не менее, эти скомпилированные модули DLL значительно больше, чем .pyc / .pyo-s.Так сказать, Cython раскрывает байт-код Python в прямые вызовы C-функций.Кроме того, он немного оптимизирует константы и т. Д. ( Установка pip Wheezy.web , например, по умолчанию вроде Cythonize всего своего кода бесстыдно без предупреждения - что затрудняет отладку и проверку во время разработки)
В дополнение к «бесплатному» приросту скорости неизмененного кода, можно добиться еще более значительного увеличения еще большего увеличения скорости (приближающегося к скорости C), особенно для числового кода / кода массива и некоторой работы OO, путем размещениянесколько статических объявлений типов Cython в горячий код Python.Обработка строки со скоростью C требует несколько более сложного кодирования.
Cython позволяет непрерывно улучшать скорость до скорости C, сосредотачиваясь на узких местах и плавно настраивая код с типами Cython.Это уникальная сила и имеет гораздо больший потенциал, чем Psyco, Numba и PyPy (как это).Это зрелый вариант без тупика.