Partage
  • Partager sur Facebook
  • Partager sur Twitter

Du web en Python, quid des performances ?

    5 août 2010 à 18:22:56

    Bonjour,

    sur les conseils de carado je me suis penché sur la réalisation d'applications web avec le langage Python.
    Je vois les multiples avantages de Python dans plusieurs aspects, par contre, au niveau de la performance j'ai quelques petits trucs à redire. J'ai suivi ce tuto et ce n'est vraiment pas à la hauteur pour une utilisation en production avec un site moyennement fréquenté, les performances sont pas vraiment bonnes ...

    Faire du Python pour le web c'est bien, mais comment lier le serveur web avec notre script ? Quelle est la meilleure solution qui comprends performances, sécurité, fiabilité, possibilité d'évolution (cluster, etc ...) ?

    Merci :)
    • Partager sur Facebook
    • Partager sur Twitter
      5 août 2010 à 19:06:21

      Salut,
      Quand tu parles de réaliser une application web avec Python tu veux dire quoi exactement? Parce qu'il existe de nombreux frameworks python permettant le développement rapides de sites performants. Le plus connu est certainement Django, dont les performances sont réputées excellentes, et qui en plus de cela propose une excellente documentation.

      Tu devrais peut-être y jeter un coup d'oeil..
      • Partager sur Facebook
      • Partager sur Twitter
        5 août 2010 à 22:26:35

        Python est largement devant php pour les performances en tout cas (à condition de bien coder évidemment, ne comparez pas un site mal écrit en Python et Wikipédia).
        • Partager sur Facebook
        • Partager sur Twitter
          5 août 2010 à 23:26:48

          Citation : iMeee


          Faire du Python pour le web c'est bien, mais comment lier le serveur web avec notre script ? Quelle est la meilleure solution qui comprends performances, sécurité, fiabilité, possibilité d'évolution (cluster, etc ...) ?



          Python en tant que langage pour les scripts CGI (comme l'est PHP), seul, n'est pas tellement intéressant (enfin, probablement plus que PHP, quand même, niveau perfs).
          Si tu veux donner dans la prod', alors il vaut mieux, comme cela a été dit, utiliser un framework. Django est bien réputé à tous les niveaux que tu indiques (performances, fiabilité...) : le reste dépend avant tout de la manière dont tu t'y prends.
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            5 août 2010 à 23:59:00

            A ce propos, quelqu'un a de vrais tests comparatifs de performances Python / PHP / N'importe quoi ?
            Je veux dire, de vrais tests de charges sur des applications comparables, pas des boucles "if" dans un coin de PC - entre autres parce que l'influence du lien "langage serveur" <---> "serveur web" n'est peut-être pas négligeable (notamment en cas de CGI).

            PS : à une époque j'avais cherché vite fait (y'a un an, un an et demie maintenant je dirais), j'ai rien trouvé de sérieux.
            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2010 à 0:54:34

              Citation : SpaceFox

              A ce propos, quelqu'un a de vrais tests comparatifs de performances Python / PHP / N'importe quoi ?
              Je veux dire, de vrais tests de charges sur des applications comparables, pas des boucles "if" dans un coin de PC - entre autres parce que l'influence du lien "langage serveur" <---> "serveur web" n'est peut-être pas négligeable (notamment en cas de CGI).

              PS : à une époque j'avais cherché vite fait (y'a un an, un an et demie maintenant je dirais), j'ai rien trouvé de sérieux.


              C'est pas possible de faire un test clair sur des applications complètes, trop de paramètres entrent en jeu.

              Déjà tu compare deux sites identiques, les deux en Python, un avec Tornadoweb, un avec Django, t'as des écarts perfs qui vont du simple au quadruple...

              Par contre on a des comparatifs sur des algos précis qui peuvent être intéressants. Ce lien particulièrement :
              http://shootout.alioth.debian.org/u32/ [...] &lang2=python

              Les valeurs prises par défaut sont celles des meilleurs codes sources proposés sur chaque langage (certains langages plus exotiques n'ont pas encore d'implémentation pour certains algos d'ailleurs).
              On voit qu'en gros l'écart de perf n'est pas si important que ça à part sur deux tests.

              Et de toutes façons pour du web, c'est pas très important, la preuve, certains utilisent même ruby ! (/troll :-° )
              Par contre sérieusement, si il y a des problèmes de perf sérieux dans une application web, le plus souvent ça vient du programmeur qui a pondu un (ou plusieurs) algo(s) pourri(s).
              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                6 août 2010 à 12:45:55

                Je connais ces divers framework, mais pour le moment j'ai pas envie d'en utiliser un.

                Je n'ai toujours pas réponse à la question malgré les réponses intéressantes :)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  6 août 2010 à 12:56:45

                  Citation : iMeee

                  Je connais ces divers framework, mais pour le moment j'ai pas envie d'en utiliser un.



                  Il est dommage (et plus ou moins dangereux) de croire que tu peux utiliser Python pour le web comme tu utilisais PHP. Contrairement à ce dernier, Python n'a pas été inventé pour le web, c'est un langage de programmation généraliste. Par conséquent, tu essayes plus ou moins de reproduire en Python ce que tu voulais faire en PHP, et ça ne marchera pas.

                  C'est injuste pour Python : PHP utilise déjà un framework web quand tu débutes, à savoir lui-même. Par conséquent, tu ne peux qu'être déçu si tu dois tout refaire à la main. Tu devrais utiliser un framework web : il y en a plein, dont certains me semblent plus simples et plus abordables que Django.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 août 2010 à 13:13:04

                    Citation : iPoulet

                    Citation : iMeee

                    Je connais ces divers framework, mais pour le moment j'ai pas envie d'en utiliser un.



                    Il est dommage (et plus ou moins dangereux) de croire que tu peux utiliser Python pour le web comme tu utilisais PHP. Contrairement à ce dernier, Python n'a pas été inventé pour le web, c'est un langage de programmation généraliste. Par conséquent, tu essayes plus ou moins de reproduire en Python ce que tu voulais faire en PHP, et ça ne marchera pas.

                    C'est injuste pour Python : PHP utilise déjà un framework web quand tu débutes, à savoir lui-même. Par conséquent, tu ne peux qu'être déçu si tu dois tout refaire à la main. Tu devrais utiliser un framework web : il y en a plein, dont certains me semblent plus simples et plus abordables que Django.



                    Dans se cas, j'y regarderais ... Merci :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 août 2010 à 14:30:53

                      Bonjour,

                      J'utilise Django depuis peu, et je n'en suis pas mécontent. Il offre une structure MVC (cf un tuto du SdZ) parfaite et des applications d'administration/gestion d'utilisateurs déjà incluses.
                      Par contre, je ne pense pas qu'utiliser Django soit le meilleur moyen si on veut faire un CMS exportable (bien qu'il existe un CMS écrit avec Django), mais ce n'est qu'un avis personnel ; je n'ai pas (encore) cherché à me renseigner dans ce domaine.

                      Cordialement,
                      ProgVal
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 août 2010 à 16:05:06

                        Citation : SpaceFox

                        A ce propos, quelqu'un a de vrais tests comparatifs de performances Python / PHP / N'importe quoi ?



                        Béh le problème c'est que pour faire ça, il faudrait implémenter un site d'une taille réaliste, dans chaque langage, bonjour le boulot !

                        Mon avis :

                        Le PHP a les avantages et les inconvénients de la simplicité. Bon, évidemment, c'est un langage pourri, mais là n'est pas la question...

                        En gros en PHP tu pars de rien à chaque page, donc il faut charger le code, faire les inits, charger les sessions, etc. Donc si ton site est conséquent, même avec un cache de code et les sessions dans memcached, tu as quand même une petite pénalité incompressible à chaque page. Mais cette pénalité c'est juste du cpu sur les serveurs php, donc les fans de php disent "tu rajoutes des serveurs !". Enfin le serveur de sessions reste quand même un goulot d'étranglement, mais tu peux utiliser memcached pour compenser.

                        Avec un serveur d'application (python, java etc) tu peux dire que chaque serveur stocke N sessions en RAM (sticky sessions) et donc le temps de chargement de la session est nul, de plus le code est déjà chargé, donc tu peux potentiellement avoir de bien meilleures perfs, surtout sur des requêtes AJAX où tu as en gros juste une url avec une seule requête SQL dedans qui renvoie au client un petit bout de données. De plus comme tu n'as pas à sérialiser / désérialiser les sessions à chaque page, tu peux avoir des sessions énormes, qui contiennent par exemple tous les résultats de la Grosse Requête de Recherche Bien Lente, que tu peux ressortir et paginer à loisir sans avoir besoin de refaire la requête. L'inconvénient des sticky sessions c'est que si un serveur pète, les sessions qui sont dessus pètent avec.

                        Donc question de compromis...
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          6 août 2010 à 16:34:50

                          Citation

                          J'utilise Django depuis peu, et je n'en suis pas mécontent. Il offre une structure MVC (cf un tuto du SdZ) parfaite et des applications d'administration/gestion d'utilisateurs déjà incluses.
                          Par contre, je ne pense pas qu'utiliser Django soit le meilleur moyen si on veut faire un CMS exportable (bien qu'il existe un CMS écrit avec Django), mais ce n'est qu'un avis personnel ; je n'ai pas (encore) cherché à me renseigner dans ce domaine.



                          J'ai fais une petite recherche, j'ai trouvé ceci :

                          http://www.django-cms.org/
                          http://www.pylucid.org/
                          http://code.djangoproject.com/wiki/CMSAppsComparison
                          http://code.google.com/p/django-page-cms/
                          http://code.google.com/p/django-blocks/
                          http://djangopluggables.com/

                          Bonne lecture
                          ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 août 2010 à 1:59:33

                            Pour la défense de Django. Je l'utilise aussi, et il ma permis de crée un projet bien structuré contrairement a d'autre langage.
                            De plus il est vrais que la partie Admin et autre modules présent d'origine sont un vrais gain de temps et de sécurité.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 août 2010 à 3:46:13

                              Citation : Lord Casque Noir


                              Avec un serveur d'application (python, java etc) tu peux dire que chaque serveur stocke N sessions en RAM (sticky sessions)



                              Tu peux faire un synchronisation de session avec tous les bons frameworks (Django, Rails, Grails), généralement avec memcached (très simple mais pas très complet), ou si ton framework est compatible: Terracotta (infiniment plus complet que memcached, mais aussi plus lourd et complexe),
                              Il suffit juste de rajouter un "Load Balancer" avant les serveurs web et ça marche tout seul (HAProxy est a ma connaissance le top en Load Balancer software)

                              T'a plus qu'a mettre du load balancing DNS pour utiliser plusieurs load balancers software, des reverse proxies, des CDN, et ayé tu scale à mort si tout est bien codé et administré ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 août 2010 à 22:16:22

                                Citation : kedare

                                Citation : Lord Casque Noir


                                Avec un serveur d'application (python, java etc) tu peux dire que chaque serveur stocke N sessions en RAM (sticky sessions)



                                Tu peux faire un synchronisation de session avec tous les bons frameworks (Django, Rails, Grails), généralement avec memcached (très simple mais pas très complet), ou si ton framework est compatible: Terracotta (infiniment plus complet que memcached, mais aussi plus lourd et complexe),
                                Il suffit juste de rajouter un "Load Balancer" avant les serveurs web et ça marche tout seul (HAProxy est a ma connaissance le top en Load Balancer software)

                                T'a plus qu'a mettre du load balancing DNS pour utiliser plusieurs load balancers software, des reverse proxies, des CDN, et ayé tu scale à mort si tout est bien codé et administré ;)



                                Je n'ai pas besoin de performances telles ... Pour le moment l'ensemble de mes sites pourraient tenir sur un serveur unique (pas une merde d'ovh à 15€ quand même). Par contre pour "prévoir" et utiliser une technologie permettant un déploiement à grande échelle, c'est intéressent.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 août 2010 à 16:22:28

                                  Citation : iMeee

                                  Je n'ai pas besoin de performances telles ... Pour le moment l'ensemble de mes sites pourraient tenir sur un serveur unique (pas une merde d'ovh à 15€ quand même)



                                  Tu es webmaster chez cdiscount ? un kimsufi c'est déjà très puissant (maintenant qu'ils ont ajouté de la ram), ça suffit largement pour un site à plus de 100K membres...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 août 2010 à 23:01:00

                                    Citation : Lord Casque Noir

                                    Citation : iMeee

                                    Je n'ai pas besoin de performances telles ... Pour le moment l'ensemble de mes sites pourraient tenir sur un serveur unique (pas une merde d'ovh à 15€ quand même)



                                    Tu es webmaster chez cdiscount ? un kimsufi c'est déjà très puissant (maintenant qu'ils ont ajouté de la ram), ça suffit largement pour un site à plus de 100K membres...



                                    Tout dépend le site. Mais une DébiBoite de Online tiendra encore mieux (meilleur CPU :) )
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Du web en Python, quid des performances ?

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown