Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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

Довольно просто: "Потому что код уже работает достаточно быстро".