35 votes

Vitesse de Python 2.x vs 3.x

Je suis un étudiant en doctorat et j'utilise Python pour écrire le code que j'utilise pour mes recherches. Mon flux de travail consiste souvent à apporter une petite modification au code, à exécuter le programme, à voir si les résultats s'améliorent et à répéter le processus. De ce fait, je passe plus de temps à attendre l'exécution de mon programme qu'à travailler sur celui-ci (une expérience courante, je sais). J'utilise actuellement la version la plus récente de Python 2 sur mon système. Ma question est donc de savoir si le passage à Python 3 va me permettre de gagner en vitesse ou non. À ce stade, je n'ai pas vraiment de raison impérieuse de passer à Python 3, donc si les vitesses d'exécution sont similaires, je vais probablement m'en tenir à la version 2.x. Je sais que je vais devoir modifier un peu mon code pour le faire fonctionner dans Python 3, donc il n'est pas trivial de le tester sur les deux versions pour voir laquelle s'exécute le plus rapidement. J'ai besoin d'être raisonnablement sûr d'obtenir une amélioration de la vitesse avant de passer du temps à mettre à jour mon code vers Python 3.

23voto

Brian Points 14040

Cet article a dit qu'il y avait quelques points où Python 3.0 était en fait plus lent que Python 2.6, bien que je pense que beaucoup de ces problèmes ont été résolus. Ceci étant dit, Numpy n'a pas encore été transféré vers Python 3.0 et c'est là que se cache une grande partie de la fonctionnalité numérique haute performance (écrite en c). Espérons qu'il sera prêt fin 2009 ou début 2010 .

Vous ne devriez pas considérer les performances comme une justification pour passer à Python 3 ; je ne pense pas que vous verrez une amélioration constante de la vitesse.

Edit : Les versions de Numpy qui supportent Python 3 ont été publiées depuis.

5voto

Khelben Points 2186

Actuellement, la vitesse sur Python 3 est plus ou moins la même que sur Python 2... Si vous recherchez la vitesse, ce n'est pas sur Python 3 vs Python 2 mais dans d'autres outils comme Psyco, Cython, etc...

Mais, Très récemment, il a été question de fusionner Unladen Swallow, le projet de Google visant à implémenter un JIT sur Python avec Python 3. Bien sûr, ce ne sera pas pour tout de suite, mais, dans quelque temps, la vitesse augmentera peut-être sensiblement sur Python 3 par rapport à Python 2. Ils prétendent avoir déjà augmenté la vitesse de 10% (sur Python 2). Leur objectif est d'augmenter la vitesse de 5 fois.

Pour plus d'informations, voir PEP 3146

EDIT : Comme le fait remarquer Brian, le PEP 3146 a été retiré.

3voto

omouse Points 2840

Essayez d'affiner les algorithmes ou de modifier les structures de données utilisées. C'est généralement le meilleur moyen d'obtenir une augmentation des performances.

2voto

Je ne peux pas répondre à la racine de votre question, mais si vous avez lu quelque chose concernant la lenteur des performances du module io, veuillez ne pas en tenir compte. Il y avait définitivement des problèmes de performance dans Python 3.0, mais ils ont été largement résolus dans Python 3.1.

2voto

telliott99 Points 1570

J'ai une analyse phylogénétique qui prend beaucoup de temps à exécuter, et qui utilise environ une demi-douzaine de scripts python ainsi que d'autres logiciels de bioinformatique (muscle, clustal, blast, même R !). J'utilise des fichiers temporaires pour sauvegarder les résultats intermédiaires et un script maître avec le module subprocess pour coller toutes les pièces ensemble. Il est facile de modifier le maître pour n'exécuter que les parties modifiées que je veux tester. Mais, si les modifications sont apportées aux premières étapes, et que vous ne connaissez la qualité qu'à la fin de tout le processus, alors cette stratégie ne serait pas d'une grande aide.

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