web-dev-qa-db-fra.com

Choisir Java vs Python sur Google App Engine

Actuellement, Google App Engine prend en charge les deux Python et Java. Java est moins mature. Cependant, Java semble avoir un Une liste plus longue de bibliothèques et en particulier un support pour le bytecode Java) quelles que soient les langues utilisées pour écrire ce code. Quelle langue donnera les meilleures performances et plus de puissance? Merci de conseiller. Merci!

Modifier: http://groups.google.com/group/google-appengine-Java/web/will-it-play- in-app-engine? pli = 1

Edit: Par "pouvoir", j'entends meilleure extensibilité et inclusion des bibliothèques disponibles en dehors du cadre. Python n'autorise que les bibliothèques Python pures, cependant.

160
Viet

Je suis partial (étant un expert Python mais assez rouillé en Java) mais je pense que le runtime Python de GAE est actuellement plus avancé et mieux développé que le runtime Java - l'ancien a eu une année supplémentaire pour se développer et mûrir, après tout.

Il est bien entendu difficile de prédire comment les choses évolueront. La demande est probablement plus forte du côté Java (d'autant plus qu'il ne s'agit pas uniquement de Java, mais d'autres langages sont également perchés au-dessus de la JVM. pour exécuter par exemple le code PHP ou Ruby sur App Engine); l'équipe de Python App Engine a toutefois l'avantage d'avoir à bord Guido van Rossum, l'inventeur de Python et un ingénieur incroyablement puissant.

Comme indiqué précédemment, le moteur Java offre la possibilité d’exécuter du bytecode JVM créé à partir de langages différents, pas seulement Java - si vous êtes dans une boutique multilingue un assez gros positif. Inversement, si vous détestez le Javascript mais que vous devez exécuter du code dans le navigateur de l'utilisateur, le GWT de Java (générant du Javascript pour vous à partir de votre code au niveau Java) est beaucoup plus riche et plus avancé que les alternatives côté Python (en pratique, si vous le souhaitez). Python, vous écrirez vous-même un JS à cette fin, tandis que si vous choisissez Java, GWT est une alternative utilisable si vous détestez écrire JS).

En termes de bibliothèques, il s’agit plutôt d’un lavage: la JVM est suffisamment restreinte (pas de threads, pas de chargeurs de classes personnalisés, pas de JNI, pas de base de données relationnelle) pour gêner autant que la simple réutilisation des bibliothèques existantes Java, , que les bibliothèques existantes Python sont gênées de la même manière par les restrictions similaires appliquées à l'exécution Python.

En termes de performances, je pense que c'est un lavage, bien que vous deviez évaluer vos propres tâches - ne vous fiez pas aux performances des implémentations hautement optimisées de JVM basées sur JIT, qui ne tiennent pas compte de leurs temps de démarrage et de leurs empreintes de mémoire importantes, car le moteur de l'application l’environnement est très différent (les coûts de démarrage sont souvent payés, car les instances de votre application sont démarrées, arrêtées, déplacées vers des hôtes différents, etc., de manière transparente pour vous - de tels événements sont généralement beaucoup moins chers avec les environnements d’exécution Python avec des machines virtuelles).

La situation XPath/XSLT (être euphémique ...) n’est pas parfaitement parfaite des deux côtés, soupir, même si je pense que cela peut être un peu moins grave dans la JVM (où, apparemment, d’importants sous-ensembles de Saxon peuvent fonctionner , avec un peu de soin). Je pense que cela vaut la peine d’ouvrir des problèmes sur la page Appengine Issues avec XPath et XSLT dans leurs titres - pour l’instant, il n’ya que des problèmes demandant des bibliothèques spécifiques, et c’est myope: cela m’importe peu. COMMENT un bon XPath/XSLT est implémenté, pour Python et/ou pour Java, aussi longtemps que je parviens à l'utiliser. (Des bibliothèques spécifiques peuvent faciliter la migration du code existant, mais cela est moins important que de pouvoir effectuer des tâches telles que "appliquer rapidement une transformation XSLT" de quelque façon! -). Je sais que je mettrais en vedette un tel problème si elle était bien formulée (en particulier de manière indépendante du langage).

Dernier point mais non le moindre: rappelez-vous que vous pouvez avoir différentes versions de votre application (en utilisant le même magasin de données), dont certaines sont implémentées avec le runtime Python, d'autres avec le runtime Java, et vous pouvez accéder aux versions. qui diffèrent de celui "default/active" avec des URL explicites. Vous pouvez donc utiliser le code Python et le code Java (dans différentes versions de votre application) et modifier le même magasin de données. , vous offrant encore plus de flexibilité (bien qu'un seul ait l'URL "sympa" telle que foobar.appspot.com - ce qui est probablement important uniquement pour l'accès des utilisateurs interactifs sur les navigateurs, j'imagine ;-).

123
Alex Martelli

Surveillez cette application pour connaître les modifications apportées à Python et Java performances:

http://gaejava.appspot.com/ (edit: excuses, le lien est rompu. Mais le paragraphe suivant est toujours appliqué lorsque je l'ai vu fonctionner pour la dernière fois)

Actuellement, Python et en utilisant l'API de bas niveau dans Java sont plus rapides que JDO sur Java, pour ce test simple . Au moins si le moteur sous-jacent change, cette application doit refléter les changements de performances.

71
Richard Watson

D'après l'expérience acquise avec ces machines virtuelles sur d'autres plateformes, je dirais que vous obtiendrez probablement plus de performances brutes de Java que de Python. Ne sous-estimez pas les arguments de vente de Python, cependant: le langage Python est beaucoup plus productif en termes de lignes de code - l’accord général est que Python nécessite un tiers du code d’un code programme équivalent Java, tout en restant lisible ou plus. Cet avantage est multiplié par la possibilité d'exécuter du code immédiatement sans étape de compilation explicite.

En ce qui concerne les bibliothèques disponibles, vous constaterez qu'une grande partie de la vaste bibliothèque d'exécution Python fonctionne immédiatement (de même que celle de Java). Le populaire framework Web Django Web ( http://www.djangoproject.com/ ) est également pris en charge sur AppEngine.

En ce qui concerne le 'pouvoir', il est difficile de savoir ce que vous voulez dire, mais Python est utilisé dans de nombreux domaines, notamment le Web: YouTube est écrit en Python, tout comme Sourceforge (la semaine dernière).

18
Judy2K

Juin 2013: Cette vidéo est une très bonne réponse d'un ingénieur de Google:

http://www.youtube.com/watch?v=tLriM2krw2E

TLDR; est:

  • Choisissez la langue avec laquelle vous et votre équipe êtes le plus productif
  • Si vous voulez construire quelque chose pour la production: Java ou Python (pas Go)
  • Si vous avez une grande équipe et une base de code complexe: Java (en raison de l'analyse de code statique et du refactoring)
  • Petites équipes qui itèrent rapidement: Python (bien que Java est également correct))
15
Bijan

Une question importante à prendre en compte pour choisir entre Python et Java est comment vous allez utiliser le magasin de données dans chaque langue (et la plupart des autres angles de la question initiale ont déjà été assez bien traités dans ce sujet).

Pour Java , la méthode standard consiste à utiliser JDO ou JPA. Celles-ci sont excellentes pour la portabilité mais ne conviennent pas très bien au magasin de données.

Une API de bas niveau est disponible, mais elle est trop basse pour une utilisation quotidienne. Elle convient mieux à la construction de bibliothèques tierces.

Pour Python , il existe une API spécialement conçue pour fournir aux applications un accès facile mais puissant au datastore. C’est génial, sauf que ce n’est pas portable, donc il vous verrouille dans GAE.

Heureusement, des solutions sont développées pour les faiblesses répertoriées dans les deux langues.

Pour Java , l'API de bas niveau est utilisée pour développer des bibliothèques de persistance beaucoup mieux adaptées au datastore que JDO/JPA (IMO). Les exemples incluent le projet Siena , et Objectify .

J'ai récemment commencé à utiliser Objectify et je le trouve très facile à utiliser et bien adapté au magasin de données. Sa popularité croissante s'est traduite par un bon support. Par exemple, Objectify est officiellement pris en charge par le nouveau service Cloud Endpoints de Google. D'autre part, Objectify ne fonctionne qu'avec le magasin de données, alors que Sienne est "inspirée" par le magasin de données, mais est conçue pour fonctionner avec une variété de bases de données SQL et de banques de données NoSQL.

Pour Python , des efforts sont en cours pour permettre l'utilisation de l'API Python GAE datastore de la GAE. Un exemple est le back-end SQLite que Google a publié pour être utilisé avec le SDK, mais je doute qu'ils aient l’intention de le transformer en quelque chose de prêt à la production. Le projet TyphoonAE a probablement plus de potentiel, pense que c'est encore prêt pour la production (corrigez-moi si je me trompe).

Si quelqu'un a déjà expérimenté l'une de ces solutions ou en connaît d'autres, merci de l'ajouter dans un commentaire. Personnellement, j'aime beaucoup le magasin de données GAE (je trouve qu'il s'agit d'une amélioration considérable par rapport à AWS SimpleDB). Je souhaite donc que ces efforts visant à atténuer certains des problèmes liés à son utilisation soient couronnés de succès.

9
Tom

Je recommande fortement Java pour GAE et voici pourquoi:

  1. Performances: Java est potentiellement plus rapide que Python.
  2. Le développement de Python est soumis à un manque de bibliothèques tierces. Par exemple, il n’existe pas de XSLT pour Python/GAE. Presque toutes les bibliothèques Python sont des liaisons C (celles-ci ne sont pas prises en charge par GAE).
  3. API Memcache: Java SDK ont des fonctionnalités plus intéressantes que Python SDK.
  4. API de magasin de données: JDO est très lent, mais l’API de magasin de données natif Java est très simple et rapide.

J'utilise Java/GAE en développement actuellement.

7
Paul

J'ai été étonné de constater à quel point le SDK Python/Django est propre, simple et sans problème. Cependant, j'ai commencé à rencontrer des situations dans lesquelles je devais commencer à utiliser plus de JavaScript et je pensais pouvoir tirer parti du GWT et d'autres utilitaires Java. Je suis à mi-chemin du GAE = Java tutoriel, et vous avez eu un problème après l'autre: problèmes de configuration Eclipse, version JRE, la complexité ahurissante de Java et un tutoriel déroutant et peut-être brisé. Voir ce site et d'autres liens. Je reviens à Python et j’examinerai le pyjama pour relever les défis de JavaScript.

6
mjhm

Comme vous l'avez indiqué, l'utilisation d'une machine virtuelle Java ne vous oblige pas à utiliser le langage Java. Vous pouvez trouver une liste des langages et des liens de la machine virtuelle Java ici . Cependant, , Google App Engine ne restreint pas l'ensemble des classes que vous pouvez utiliser à partir de l'ensemble Java SE défini, et vous en aurez besoin). vouloir étudier si l’une ou l’autre de ces implémentations peut être utilisée sur le moteur de l’application.

EDIT: Je vois que vous avez trouvé une telle liste

Je ne peux pas commenter les performances de Python. Cependant, la JVM est une plate-forme très puissante en termes de performances, compte tenu de sa capacité à compiler et à optimiser de manière dynamique le code pendant l'exécution.

En fin de compte, les performances dépendront de ce que fait votre application et de la manière dont vous la codez. En l'absence d'informations supplémentaires, je pense qu'il n'est pas possible de donner d'autres indicateurs dans ce domaine.

6
Brian Agnew

Je suis un peu en retard dans la conversation, mais voici mes deux sous. J'ai vraiment eu du mal à choisir entre Python et Java, car je connais bien les deux langages. Comme nous le savons tous, il y a des avantages et des inconvénients pour les deux, et il faut en tenir compte. vos exigences et les cadres qui fonctionnent le mieux pour votre projet.

Comme d'habitude dans ce type de dilemmes, je cherche des chiffres pour appuyer ma décision. J'ai décidé d'aller avec Python pour de nombreuses raisons, mais dans mon cas, il y avait un complot qui était le point critique. Si vous recherchez "Google App Engine" dans GitHub le Septembre 2014, vous trouverez le chiffre suivant:

GAE Language Stats

Ces nombres peuvent comporter de nombreux biais, mais dans l’ensemble, il existe trois fois plus de référentiels GAE Python que de référentiels GAE Java. Ce n'est pas tout. Répertoriez les projets en fonction du "nombre d'étoiles". Vous verrez qu'une majorité des Python apparaissent en haut (vous devez prendre en compte que Python = Cela fait plus de cas pour moi Python car je tiens compte de l’adoption et du support de la communauté, de la documentation et de la disponibilité des projets open source.

5

D'après ce que j'entends Java, les utilisateurs se plaignent d'AppEngine par rapport à Python, je dirais que Python est beaucoup moins stressant à utiliser.

3
Noah McIlraith

C'est une bonne question, et je pense que beaucoup de réponses ont donné de bons points de vue sur les avantages et les inconvénients des deux côtés de la barrière. J'ai essayé à la fois Python et AppEngine basé sur JVM (dans mon cas, j'utilisais Gaelyk , qui est un framework d'application Groovy conçu pour AppEngine). En ce qui concerne les performances sur la plate-forme, une chose que je n’avais pas prise en compte jusqu’à ce qu’elle me regarde en face est l’implication des "requêtes de chargement" qui se produisent du côté Java de la clôture. Lors de l’utilisation de Groovy ces demandes de chargement sont un tueur.

J'ai mis un article sur le sujet ( http://distractable.net/coding/google-appengine-Java-vs-python-performance-comparison/ ) et j'espère trouver un moyen de contourner le problème, mais sinon je pense que je vais revenir à un Python + Django combinaison jusqu'au démarrage à froid Java requêtes a moins d’impact.

3
Damon Oehlman

Il y a aussi le projet nladen Swallow , qui est apparemment financé par Google, voire par Google. Ils essayent d'implémenter un backend basé sur LLVM pour le bytecode 2.6.1 de Python), afin de pouvoir utiliser un JIT et diverses optimisations de code natif/GC/multicœur de Nice. "Nous aspirons à ne pas faire de travail original, mais à utiliser au maximum les 30 dernières années de recherche.") Ils recherchent une vitesse 5 fois supérieure à celle de CPython.

Bien sûr, cela ne répond pas à votre question immédiate, mais indique une "réduction de l'écart" (le cas échéant) à l'avenir (si tout va bien).

2
synchromesh

La beauté de python aujourd’hui, c’est la qualité de sa communication avec d’autres langues. Par exemple, vous pouvez avoir les deux python et Java sur la même table avec Jython. Bien sûr, jython, même s’il supporte totalement les bibliothèques Java, il ne supporte pas totalement les bibliothèques python. Mais cela ne vouloir jouer avec les bibliothèques Java. Il vous permet même de le mélanger avec du code Java sans codage supplémentaire.

Mais même python a lui-même fait quelques pas. Voir ctypes par exemple, vitesse proche de C, accès directs aux bibliothèques C tout cela sans quitter le confort de python = coding. Cython va encore plus loin en permettant de mélanger du code c avec python facilement, ou même si vous ne voulez pas jouer avec c ou c ++, vous pouvez toujours coder en python mais utilisez des variables de type statique rendant votre python programms aussi rapide que les applications C.) Cython est à la fois utilisé et supporté par Google.

Hier, j'ai même trouvé des outils pour python en C ou même Assembly (voir CorePy), vous ne pouvez pas obtenir plus puissant que cela.

Python est sûrement un langage très mature, non seulement autonome, mais capable de coopérer facilement avec tout autre langage. Je pense que c’est ce qui fait de python une solution idéale, même dans des scénarios très avancés et exigeants.

Avec python, vous pouvez accéder au C/C++, à Java, à .NET et à bien d’autres bibliothèques sans pratiquement aucun codage supplémentaire, ce qui vous donne également un langage qui minimise, simplifie et embellit le codage. la langue.

2
kilon

Partit avec Python même si GWT semble correspondre parfaitement au type d'application que je suis en train de développer. JPA est assez foiré sur GAE (par exemple, pas de @Embeddable ni d'autres limitations obscures non documentées) Après avoir passé une semaine, je peux dire que Java ne se sent pas bien sur GAE pour le moment.

1
yanchenko

Vous pensez prendre en compte les cadres que vous comptez utiliser. Tous les cadres du côté Java ne conviennent pas aux applications exécutées sur App Engine, ce qui diffère quelque peu des serveurs traditionnels Java).

Une chose à considérer est le temps de démarrage de l'application. Avec les applications Web classiques Java), vous n'avez pas vraiment besoin de penser à cela. L'application démarre, puis elle s'exécute. Peu importe si le démarrage prend 5 secondes ou quelques minutes. Avec App Engine, vous risquez de vous retrouver dans une situation où l'application ne démarre que lorsqu'une demande est reçue. Cela signifie que l'utilisateur attend pendant le démarrage de votre application. Les nouvelles fonctions GAE telles que les instances réservées aident ici, mais vérifiez d'abord.

Une autre chose sont les différentes limitations GAE psoes sur Java. Tous les frameworks ne sont pas satisfaits des limitations sur les classes que vous pouvez utiliser ou du fait que les threads ne sont pas autorisés ou que vous ne pouvez pas accéder au système de fichiers local. Ces problèmes sont probablement faciles à résoudre en cherchant simplement sur la compatibilité GAE.

J'ai également vu certaines personnes se plaindre de problèmes de taille de session sur des cadres d'interface utilisateur modernes (Wicket, à savoir). En général, ces cadres ont tendance à faire certains compromis pour rendre le développement amusant, rapide et facile. Parfois, cela peut entraîner des conflits avec les limitations de App Engine.

J'ai initialement commencé à travailler sur GAE avec Java, puis je suis passé à Python pour ces raisons. Mon sentiment personnel Est-ce que Python est un meilleur choix pour le développement de App Engine. Je pense que Java est plus "à la maison", par exemple sur Elastic Beanstalk d'Amazon.

MAIS avec App Engine, les choses changent très rapidement. GAE est en train de changer et, au fur et à mesure de sa popularité, les frameworks évoluent également pour contourner ses limites.

1
Juha Palomäki