Почему бы не всегда использовать psyco для кода Python?

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

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

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

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

    8 Solutions collect form web for “Почему бы не всегда использовать psyco для кода Python?”

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

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

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

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

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

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

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

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

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

    Несколько других вещей:

    1. Кажется, что это не очень активно поддерживается.
    2. Это может быть память.

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

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

    Python - лучший язык программирования в мире.