Почему бы не всегда использовать psyco для кода Python? - PullRequest
40 голосов
/ 22 февраля 2009

psyco кажется весьма полезным для оптимизации кода на Python, и делает это очень ненавязчивым способом.

Поэтому нужно задаться вопросом. Предполагая, что вы всегда работаете на архитектуре x86 (именно там в настоящее время работает большинство приложений), почему бы просто не использовать psyco для всего кода Python? Это иногда делает ошибки и разрушает правильность программы? Увеличивает время выполнения для некоторых странных случаев?

Были ли у вас какие-либо негативные переживания? Мой самый негативный опыт до сих пор заключался в том, что он сделал мой код быстрее всего на 15%. Обычно это лучше.

Естественно, использование psyco не является заменой эффективных алгоритмов и кодирования. Но если вы сможете улучшить производительность своего кода за счет двух строк (импортирование и вызов psyco), я не вижу веских причин не делать этого.

Ответы [ 8 ]

22 голосов
/ 17 сентября 2009

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 действительно приводит к ошибкам. Некоторые из них перечислены здесь .

6 голосов
/ 22 февраля 2009

Псико в настоящее время использует много памяти. Он работает только на Intel 386-совместимом процессоры (под любую ОС) прямо сейчас. Есть некоторая тонкая семантика различия (то есть ошибки) со способом Python работает; они не должны быть очевидно в большинстве программ.

См. Также раздел предостережений . В качестве жесткого примера я заметил, что мое веб-приложение с шаблонами, сгенерированными Cheetah, и вводом / выводом из БД не достигло заметного ускорения.

5 голосов
/ 22 февраля 2009

При использовании pyglet я обнаружил, что не могу использовать psyco во всем приложении, не отключив его. Конечно, я мог использовать его в небольших разделах математического кода, но в этом не было необходимости, поэтому я не стал беспокоиться.

Кроме того, psyco сделал странные вещи с моими результатами профилирования (например, вообще не изменил их по сравнению с непсихической версией). Я подозреваю, что это не очень хорошо с профилирующим кодом.

Я просто не буду использовать это, если я действительно не хочу скорость, которая не так уж часто. Мой приоритет - оптимизация алгоритма, которая обычно приводит к более быстрому ускорению.

4 голосов
/ 18 сентября 2012

Психо мертв и больше не поддерживается. Пора найти другую

4 голосов
/ 22 февраля 2009

Это также зависит от вашего узкого места. Я в основном занимаюсь веб-приложениями, и узкими местами, вероятно, являются дополнительные операции ввода-вывода и базы данных. Так что вы должны знать, где оптимизировать.

Также имейте в виду, что, возможно, вам следует сначала подумать о своем коде, а не бросать в него психо. Поэтому я согласен с Девином в том, что оптимизация алгоритма должна быть на первом месте, и у них может быть меньше шансов нежелательных побочных эффектов.

3 голосов
/ 23 февраля 2009

Никогда не следует полагаться на магическую пулю, чтобы решить ваши проблемы. Использование psyco для ускорения медленной программы обычно не требуется. Плохие алгоритмы могут быть переписаны, и части, для которых требуется скорость, могут быть написаны на другом языке. Конечно, ваш вопрос спрашивает, почему мы не используем его для повышения скорости в любом случае, и есть некоторые накладные расходы, когда вы используете psyco. Psyco использует память, и эти две строчки просто как бы кажутся над головой, когда вы смотрите на них. Что касается моей личной причины того, почему я не использую psyco, то это потому, что он не поддерживает x86_64, который я вижу как новую и будущую архитектуру (особенно с приближением 2038 года рано или поздно). Моя альтернатива - pypy, но мне это тоже не совсем нравится.

2 голосов
/ 07 марта 2009

Пара других вещей:

  1. Это, кажется, не очень активно поддерживается.
  2. Это может быть боров памяти.
1 голос
/ 23 февраля 2009

Проще говоря: «потому что код уже работает достаточно быстро».

...