753 votes

Pourquoi ne devrais ' t j’ai utiliser PyPy sur CPython si PyPy est 6,3 fois plus rapide ?

J'ai entendu beaucoup de choses sur la PyPy projet. Ils prétendent que c'est de 6,3 fois plus rapide que le Disponible interprète sur leur site.

Chaque fois que nous parlons de dynamique des langages comme Python, la vitesse est l'un des principaux problèmes. Pour résoudre ce problème, ils disent que PyPy est de 6,3 fois plus rapide.

Le deuxième problème est le parallélisme, l'infâme Mondiale Interprète de Verrouillage (GIL). Pour cela, PyPy dit qu'il peut donner GIL-moins de Python.

Si PyPy permet de remédier à ces grands défis, quelles sont ses faiblesses qui empêchent l'adoption plus large? C'est-à-dire, ce qui empêche quelqu'un comme moi, typique d'un développeur Python, de changer de PyPy droit maintenant?

703voto

Veedrac Points 11712

PyPy, comme d'autres l'ont été prompt à parler, a ténue de soutien pour les extensions. Il a l'appui, mais en général, à moins rapide que Python vitesses et il est douteux, au mieux. C'est pourquoi beaucoup de modules de simplement exiger Disponible. Cython et Numpy sont impressionnant pour des nombres, et la plupart des gens qui en ont réellement besoin de vitesse en Python sont à l'aide de ceux (+ Pandas, SciPy, etc.) fortement. Depuis qu'ils sont soit inexistants, soit pas clair prises en charge et de ralentir les gens qui ont besoin d'un rapide Python sont souvent mieux avec Disponible à la fois pour la vitesse et la facilité d'utilisation.

Deuxièmement, Python 3 support expérimental pour le moment. a tout juste atteint stable! À compter du 20 juin 2014, PyPy3 2.3.1 - Fulcrum est sorti!

Troisièmement, PyPy n'est pas vraiment le plus rapide pour les "scripts", qui beaucoup de gens utilisent Python. Ce sont les court-programmes en cours d'exécution que de faire quelque chose de simple et de petite taille. Parce que PyPy est un compilateur JIT de ses principaux avantages proviennent de longues durées d'exécution et les types simples (tels que les nombres). Franchement, PyPy pré-JIT vitesses sont assez mauvais par rapport à Disponible.

Quatrièmement, l'inertie. Le déplacement de PyPy nécessite souvent de rééquipement, qui pour certaines personnes et certains organismes est tout simplement trop de travail.

Ceux-ci sont les principales raisons qui me concerne, je dirais.

111voto

spookylukey Points 2249

Ce site n'a pas de revendication de PyPy est de 6,3 fois plus rapide que Disponible. Pour citer:

La moyenne géométrique de tous les points de repère est de 0,16, ou de 6,3 fois plus rapide que Disponible

C'est une très différents déclaration à la couverture de la déclaration que vous avez fait, et quand vous comprenez la différence, vous l'aurez compris, au moins un ensemble de raisons pour lesquelles vous ne pouvez pas simplement dire "utiliser PyPy". Il peut sembler que je suis tatillon, mais de comprendre pourquoi ces deux affirmations sont totalement différents, c'est vital.

À casser cela:

  • La déclaration qu'ils font ne s'applique qu'aux repères qu'ils ont utilisé. Il ne dit absolument rien au sujet de votre programme (à moins que votre programme est exactement le même que celui de leur indice de référence).

  • L'énoncé est d'environ une moyenne d'un groupe de repères. Il ne prétend pas que l'exécution de PyPy donnera une 6,3 fois l'amélioration de même pour les programmes qu'ils ont testé.

  • Il ne prétend pas que PyPy sera même exécuter tous les programmes qui Disponible fonctionne à tous, a fortiori, de plus en plus vite.

86voto

Tritium21 Points 1255

Pypy n’étant pas 100 % compatible, prend 8 Go de ram à compiler, est une cible mouvante, et hautement expérimentale, où cpython est stable, la valeur par défaut cible pour les constructeurs de module pendant deux décennies (y compris les extensions c qui ne fonctionnent pas sur pypy) et déjà largement déployé .

PyPy ne sera probablement jamais l’implémentation de référence, mais c’est un bon outil d’avoir.

40voto

BrenBarn Points 63718

La deuxième question est plus facile à répondre: en gros, vous pouvez utiliser PyPy que d'une baisse-dans le remplacement si votre code est pur Python. Cependant, de nombreuses largement utilisé les bibliothèques (y compris certains de la bibliothèque standard) sont écrites en C et compilé comme les extensions Python. Certains de ces derniers peuvent être faits pour travailler avec PyPy, certains ne peuvent pas. PyPy la même "face à l'outil Python --- qui est, il est Python --- mais ses entrailles sont différents, de sorte que les outils de l'interface avec ces entrailles ne fonctionne pas.

Comme pour la première question, j'imagine que c'est une sorte de Fourre-22 avec le premier: PyPy a été évoluent rapidement dans un effort pour améliorer la vitesse et d'améliorer l'interopérabilité avec d'autres codes. De ce fait, plus expérimental que officiel.

Je pense que c'est possible que si PyPy pénètre dans un état stable, il peut commencer à obtenir plus largement utilisé. Je pense aussi qu'il serait intéressant pour Python pour s'éloigner de son C fondements. Mais cela ne se produira pas pendant un certain temps. PyPy n'a pas encore atteint la masse critique où il est presque utile suffisant pour faire tout ce que vous voulez, qui motivent les gens à combler les lacunes.

15voto

Eric Urban Points 1460

J'ai fait un petit test sur ce sujet. Alors que de nombreux autres affiches ont fait de bons points sur la compatibilité, mon expérience a été que PyPy n'est pas beaucoup plus rapide de simplement déplacer autour de bits. Pour de nombreuses utilisations de Python, il existe uniquement pour traduire les bits entre deux ou plusieurs services. Par exemple, ne pas de nombreuses applications web sont en effectuant l'UC de l'analyse d'ensembles de données. Au lieu de cela, ils prennent quelques octets à partir d'un client, de les stocker dans une sorte de base de données, et, plus tard, de retour à d'autres clients. Parfois, le format des données est modifiée.

Le BDFL et le Disponible les développeurs sont remarquablement intelligente groupe de personnes et ont réussi à l'aide Disponible excellente dans un tel scénario. Voici une honteuse blog plug: http://www.hydrogen18.com/blog/unpickling-buffers.html . Je suis en utilisant Stackless, qui est dérivé de Disponible et conserve l'intégralité C module d'interface. Je n'ai trouvé aucun avantage de l'utilisation de PyPy dans ce cas.

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