Почему бы не всегда использовать psyco для кода Python?
psyco кажется весьма полезным при оптимизации кода Python, и он делает это очень неинтрузивным способом.
Поэтому нужно удивляться. Предполагая, что вы всегда на x86-архитектуре (где большинство приложений работают в наши дни), почему бы не просто использовать psyco
для всего кода Python? Иногда это делает ошибки и разрушает правильность программы? Увеличивает время выполнения для некоторых странных случаев?
Были ли у вас какие-то негативные переживания? Мой самый негативный опыт в том, что он сделал мой код быстрее всего на 15%. Обычно это лучше.
Естественно, использование psyco не является заменой эффективным алгоритмам и кодированию. Но если вы можете повысить производительность своего кода за стоимость двух строк (импорт и вызов psyco), я не вижу веских оснований не делать этого.
Ответы
Ответ 1
1) Накладные расходы памяти являются основными, как описано в других ответах. Вы также оплачиваете стоимость компиляции, которая может быть запретительной, если вы не избирательны. Из справки :
Компиляция всего часто бывает излишним для приложений среднего или крупного размера. Недостатки компиляции слишком много - это время, затраченное на компиляцию, плюс объем памяти, который этот процесс потребляет. Это тонкий баланс.
2) Производительность может нанести ущерб компиляции Psyco. Снова из руководства пользователя ( "известные ошибки" ):
Есть также ошибки производительности: ситуации, в которых Psyco замедляет код, а не ускоряет его. Трудно составить полный список возможных причин, но вот несколько общих:
- Следует избегать встроенных функций
map
и filter
и заменяться их пониманием по спискам. Например, map(lambda x: x*x, lst)
следует заменить более читаемым, но более поздним синтаксисом [x*x for x in lst]
. - Компиляция регулярных выражений, по-видимому, не принесла пользы от Psyco. (Выполнение регулярных выражений не изменяется, так как это код C.) Не включайте Psyco в этот модуль; если необходимо, отключите его явно, например. вызывая
psyco.cannotcompile(re.compile)
.
3) Наконец, есть некоторые относительно неясные ситуации, когда использование Psyco действительно приведет к ошибкам. Некоторые из них перечислены здесь.
Ответ 2
В настоящее время Psyco использует много памяти. Он работает только на совместимом с Intel 386 процессоров (под любой ОС) прямо сейчас. Есть несколько тонких семантических различия (т.е. ошибки) с Питон работает; они не должны быть очевидно в большинстве программ.
См. также раздел оговорки. Для жесткого примера я заметил, что мое веб-приложение с шаблонами, генерируемыми Cheetah, и DB I/O не получили заметного ускорения.
Ответ 3
При использовании pyglet я обнаружил, что не могу использовать psyco во всем приложении, не делая свое приложение нефункциональным. Конечно, я мог бы использовать его в небольших разделах математического кода, но это было необязательно, поэтому я не беспокоился.
Кроме того, psyco сделал странные вещи с моими результатами профилирования (такими как, ну, не изменяя их вообще от версии, отличной от psyco). Я подозреваю, что он не играет хорошо с кодом профилирования.
Я просто не использую его, если я действительно не хочу скорости, что не так часто. Мой приоритет - оптимизация алгоритмов, что обычно приводит к более быстрым ускорениям.
Ответ 4
Это также зависит от вашего узкого места. В основном я занимаюсь веб-приложениями, и там узкие места, вероятно, больше ввода-вывода и базы данных. Поэтому вы должны знать, где оптимизировать.
Также будьте осторожны, возможно, сначала вам стоит подумать о своем коде, а не просто бросать на него psyco. Поэтому я согласен с Devin, что оптимизация алгоритмов должна быть первой, и у них может быть меньше шансов на нежелательные побочные эффекты.
Ответ 5
Никогда не следует полагаться на волшебную пулю, чтобы исправить свои проблемы. Использование psyco для ускорения медленной программы обычно не требуется. Плохие алгоритмы могут быть переписаны, а части, требующие скорости, могут быть записаны на другом языке. Конечно, ваш вопрос спрашивает, почему мы не используем его для ускорения скорости в любом случае, и там немного накладных расходов, когда вы используете psyco. Psyco использует память, и эти две строки просто сортируются, когда вы смотрите на них сверху вниз. Что касается моей личной причины, почему я не использую psyco, это потому, что он не поддерживает x86_64, который я вижу как новую и будущую архитектуру (особенно с приближением 2038 года раньше или позже). Моя альтернатива - это pypy, но я не совсем люблю это.
Ответ 6
Несколько других вещей:
- Он, похоже, не очень активно поддерживается.
- Это может быть память.
Ответ 7
psyco мертв и больше не поддерживается. Пришло время найти еще один
Ответ 8
Довольно просто: "Потому что код уже работает достаточно быстро".