41 votes

Pourquoi ne pas toujours utiliser psyco pour le code Python?

psyco semble être tout à fait utile dans l'optimisation de code Python, et il le fait dans un très non envahissantes.

Par conséquent, on doit se demander. En supposant que vous êtes toujours sur une architecture x86 (qui est où la plupart des applications de l'exécution de ces jours), pourquoi ne pas simplement utiliser toujours psyco pour l'ensemble du code Python? Faut-il faire des erreurs parfois, et les ruines de l'exactitude du programme? Augmente le runtime pour quelque étrange cas?

Avez-vous eu des expériences négatives avec elle? Ma plus mauvaise expérience que mon code plus rapide que de 15%. Habituellement, c'est mieux.

Naturellement, à l'aide de psyco n'est pas un remplacement pour l'efficacité des algorithmes et à la programmation. Mais si vous pouvez améliorer les performances de votre code pour le prix de deux lignes (de l'importation et de l'appel de psyco), je ne vois aucune bonne raison de ne pas.

22voto

ire_and_curses Points 32802

1) La surcharge de la mémoire est le principal, comme décrit dans d'autres réponses. Vous devez aussi payer le coût de compilation, ce qui peut être prohibitif si vous n'êtes pas sélective. À partir de la référence de l'utilisateur:

La compilation de tout ce qui est souvent exagéré de moyenne ou de grande taille des applications. Les inconvénients de la compilation de trop sont dans le temps passé à la compilation, plus la quantité de mémoire que ce processus consomme. C'est un subtil équilibre à maintenir.

2) le Rendement peut effectivement être lésés par Psyco compilation. Nouveau à partir du guide de l'utilisateur ("bugs connus" de la section):

Il y a aussi la performance de bugs: les situations dans lesquelles Psyco ralentit le code au lieu de l'accélérer. Il est difficile de faire une liste complète des raisons possibles, mais voici quelques-unes des plus communes:

  • Le haut- map et filter fonctions doit être évitée et remplacée par la compréhension de liste. Par exemple, map(lambda x: x*x, lst) devrait être remplacé par le plus lisible mais plus récente de la syntaxe [x*x for x in lst].
  • La compilation des expressions régulières ne semble pas bénéficier de la Psyco. (L'exécution des expressions régulières est pas affectée, car c'est du code C.) Ne pas activer la Psyco sur ce module; si nécessaire, désactiver explicitement, par exemple en appelant psyco.cannotcompile(re.compile).

3) Enfin, il y a quelques relativement obscur des situations où l'aide de Psyco sera effectivement introduire des bogues. Certains d'entre eux sont énumérés ici.

6voto

HUAGHAGUAH Points 1369

Psyco actuellement utilise beaucoup de mémoire. Il ne fonctionne que sur Intel 386-compatible les processeurs (sous n'importe quel OS) dès maintenant. Il y a quelques subtiles sémantique les différences (c'est à dire les bugs) avec le chemin Python œuvres; ils ne devraient pas être apparente dans la plupart des programmes.

Voir aussi les mises en garde de la section. Pour une dure exemple, j'ai remarqué que mon application web avec le Guépard-les modèles générés et DB I/O n'a pas appréciable speedup.

5voto

Devin Jeanpierre Points 23162

Lors de l'utilisation de pyglet j'ai trouvé que je ne pouvais pas utiliser psyco sur la totalité de l'app sans faire mon application non fonctionnelle. Je pourrais l'utiliser dans de petites sections de mathématiques-lourds de code, bien sûr, mais il n'était pas nécessaire, donc je n'ai pas pris la peine.

Aussi, psyco a fait des choses étranges avec mon profilage de résultats (tels que, eh bien, pas de les modifier à tout à partir de la non-psyco version). Je le soupçonne de ne pas jouer gentil avec le code de profilage.

Je n'ai pas vraiment l'utiliser, sauf si j'ai vraiment envie de la vitesse, ce qui n'est pas souvent. Ma priorité, c'est l'algorithme d'optimisation, ce qui permet généralement de plus agréable accélérations.

4voto

MrTopf Points 2708

Cela dépend également de l'emplacement de votre goulot d'étranglement. Je fais surtout des applications Web et là-bas, les goulets d'étranglement sont probablement plus IO et base de données. Vous devez donc savoir où optimiser.

Sachez également que vous devriez peut-être commencer par penser à votre code au lieu de jeter directement psyco dessus. Je suis donc d’accord avec Devin pour dire que les optimisations d’algorithmes devraient venir en premier et qu’elles risqueraient moins d’avoir des effets secondaires indésirables.

3voto

Andrew Szeto Points 632

Il ne faut jamais se fier à certains de formule magique pour résoudre votre problèmes. À l'aide de psyco pour faire un programme lents plus rapide est généralement pas nécessaire. Mauvais algorithmes peuvent être réécrite, et les pièces qui nécessitent de la vitesse peut être écrite dans une autre langue. Bien sûr, votre question demande pourquoi nous ne l'utilisons pas pour le boost de vitesse de toute façon, et il y a un peu de surcharge lorsque vous utilisez psyco. Psyco utilise de la mémoire, et ces deux lignes juste sorta de se sentir comme la surcharge quand vous les regardez. Quant à ma raison personnelle, sur laquelle je ne pas utiliser psyco, c'est parce qu'il ne prend pas en charge x86_64, que je vois comme la nouvelle place et à venir de l'architecture (en particulier avec 2038 approche tôt ou tard). Mon alternative est pypy, mais je ne suis pas vraiment friand de ce soit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X