Lequel de ces frameworks / bibliothèques serait le meilleur choix pour créer une application Web multi-utilisateurs moderne? J'adorerais avoir un serveur Web asynchrone qui me permettra d'évoluer facilement. Quelle solution offrira les meilleures performances / évolutivité / cadre le plus utile (en termes de facilité d'utilisation et de développement facile)?
Ce serait formidable s'il fournissait de bonnes fonctionnalités (websockets, rpc, streaming, etc.).
Quels sont les avantages et les inconvénients de chaque solution?
Réponses:
" Django est un framework Web Python de haut niveau qui encourage un développement rapide et une conception propre et pragmatique" . Si vous créez quelque chose qui ressemble à un site de commerce électronique, vous devriez probablement utiliser Django. Votre travail sera effectué rapidement. Vous n'avez pas à vous soucier d'un trop grand nombre de choix technologiques. Il fournit tout ce dont vous avez besoin, du moteur de modèle à l'ORM. Il sera légèrement avisé de la façon dont vous structurez votre application, ce qui est bien si vous me le demandez. Et il a la communauté la plus forte de toutes les autres bibliothèques, ce qui signifie qu'une aide facile est disponible.
" Flask est un microframework pour Python basé sur Werkzeug, Jinja 2 et de bonnes intentions" . Attention, le "microframework" peut être trompeur. Cela ne signifie pas que Flask est une bibliothèque à moitié cuite. Cela signifie que le noyau du flacon est très, très simple. Contrairement à Django, il ne prendra aucune décision technologique à votre place. Vous êtes libre de choisir n'importe quel moteur de template ou ORM qui vous plaît. Même s'il est livré avec le moteur de modèle Jinja par défaut, vous êtes toujours libre de choisir le nôtre. Autant que je sache, Flask est utile pour écrire des points de terminaison d'API (services RESTful).
" Twisted est un moteur de réseautage événementiel écrit en python" . C'est un moteur performant. La raison principale de sa vitesse est quelque chose appelé comme différé. Twisted est construit sur les différés. Pour ceux d'entre vous qui ne connaissent pas les différés, c'est le mécanisme à travers l'architecture asynchrone qui est atteint. Twisted est très rapide. Mais ne convient pas à l'écriture d'applications Web conventionnelles. Si vous voulez faire quelque chose de réseautage de bas niveau, tordu est votre ami.
« Tornado est un framework Web Python et une bibliothèque de mise en réseau asynchrone, initialement développés chez FriendFeed. En utilisant des E / S réseau non bloquantes, Tornado peut évoluer jusqu'à des dizaines de milliers de connexions ouvertes, ce qui le rend idéal pour les longues interrogations, les WebSockets et d'autres applications qui nécessitent une connexion de longue durée à chaque utilisateur " . Tornado se trouve quelque part entre Django et Flask. Si vous souhaitez écrire quelque chose avec Django ou Flask, mais si vous avez besoin de meilleures performances, vous pouvez opter pour Tornado. il peut très bien gérer le problème du C10k s'il est correctement architecturé.
" Cyclone est un framework de serveur Web pour Python qui implémente l'API Tornado en tant que protocole Twisted" . Maintenant, que faire si vous voulez quelque chose qui soit presque aussi performant que Twisted mais facile à écrire des applications Web conventionnelles? Dites bonjour au cyclone. Je préférerais Cyclone à Tornado. Il possède une API très similaire à Tornado. En fait, c'est une fourchette de Tornado. Mais le problème est que la communauté est relativement petite. Alexandre Fiori est le seul principal engagement du repo.
« Pyramid est un cadre général de développement d'applications Web Python open source. Son objectif principal est de faciliter la création d'applications Web par un développeur Python.» Je n'ai pas vraiment utilisé Pyramid, mais j'ai parcouru la documentation. D'après ce que je comprends, Pyramid est très similaire à Flask et je pense que vous pouvez utiliser Pyramid partout où Flask semble approprié et vice-versa.
EDIT : Les demandes de révision de tout autre framework sont les bienvenues!
Source: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
la source
C'est évidemment une réponse quelque peu biaisée , mais ce n'est pas la même chose qu'une mauvaise réponse; vous devez toujours utiliser Twisted. J'ai déjà répondu à des questions similaires , mais comme votre question n'est pas tout à fait la même, voici quelques raisons:
"Meilleure performance"
Twisted surveille en permanence nos performances sur le site speed.twistedmatrix.com . Nous avons également été l'un des premiers projets à être surveillé par le site similaire de PyPy , assurant ainsi les bonnes performances de Twisted sur le runtime que toute personne concernée par des applications haute performance en Python.
"Évolutivité"
À ma connaissance, aucun des frameworks répertoriés ne prend en charge la mise à l'échelle automatique; ce sont tous des cadres de communication, vous devez donc faire le travail pour communiquer entre vos nœuds de mise à l'échelle. Cependant, Twisted a un avantage dans sa prise en charge intégrée du multi-traitement local . Pour être honnête, il existe un module complémentaire tiers pour Tornado qui vous permet de faire la même chose. Dans les versions récentes, Twisted a ajouté des fonctionnalités qui augmentent le nombre de façons dont vous pouvez partager le travail entre les cœurs, et le travail est en cours dans ce domaine. Twisted a également deux bien intégrés , « natifs » protocoles RPC qui offrent un kit de construction pour quelque idiome mise à l' échelle que vous voulez poursuivre.
"Le plus utile"
Beaucoup de gens semblent trouver Twisted très utile . À tel point que beaucoup d'entre eux l'ont étendu et mis leurs extensions à votre disposition.
"Fonctionnalité"
Hors de la boîte, Twisted comprend:
Dans ce dernier département, au moins, Twisted semble être un gagnant clair pour les fonctionnalités intégrées. Et tout cela, dans un package d'un peu plus de 2 mégaoctets!
la source
spawnProcess
, cette planification d'E / S peut également être traduite en planification CPU.J'aime la réponse @Glyph. Twisted est un framework python très complet et riche. Twisted et Tornado ont un design très similaire. Et j'aime beaucoup ce design:
Mais je veux souligner Tornado , que je préfère et qui a récemment gagné en popularité. Tornado, comme Twisted, utilise une programmation de style callback, mais elle peut être intégrée en utilisant
tornado.gen.engine
(twisted.internet.inlineCallbacks
dans Twisted).Base de code
Le meilleur commentaire vient du site http://cyclone.io . cyclone essaie de mélanger Twisted et Tornado parce que:
Mais en 2011
tornado.platform.twisted
était sorti ce qui apporte des fonctionnalités similaires.Performance
Tornado a de bien meilleures performances . Il fonctionne également de manière transparente avec PyPy et obtient un gain énorme.
Évolutivité
La même chose que Twisted. Tornado a
tornado.process
mis en œuvre de nombreux services RPC en plus.Fonctionnalité
Il existe 71 packages basés sur Tornado, contre 148 Twisted et 48 Gevent. Mais si vous regardez attentivement et calculez la médiane du temps de téléchargement des paquets, vous verrez que les Twisted sont les plus anciens, puis Gevent et Tornado les plus récents. De plus, il existe un
tornado.platform.twisted
module qui vous permet d' exécuter du code écrit pour Twisted on Tornado .Résumé
Avec Tornado, vous pouvez utiliser un code de Twisted. Il n'est pas nécessaire d'utiliser un cyclone qui ne fait que tordre votre code (votre code devient plus désordonné).
Quant à 2014, Tornado est considéré comme un framework async par défaut largement accepté qui fonctionne à la fois sur python2 et python3. De plus, la dernière version 4.x apporte de nombreuses fonctionnalités de https://docs.python.org/dev/library/asyncio.html .
J'ai écrit un article, expliquant pourquoi je considère que Tornado - le meilleur framework Web Python où j'ai écrit beaucoup plus sur les fonctionnalités de Tornado.
la source
( MISE À JOUR : je suis tristement surpris du peu de réponses ici recommandent ou même mentionnent Gevent - je ne pense pas que ce soit proportionnel à la popularité, aux performances et à la facilité d'utilisation de cette excellente bibliothèque!)
Gevent et Twisted ne sont pas mutuellement exclusifs, même si le contraire peut sembler évident au premier abord. Il existe un projet appelé
geventreactor
qui permet de tirer parti du meilleur des deux mondes de manière relativement fluide, à savoir:inlineCallbacks
n'est tout simplement pas à la hauteur en termes de performances lorsqu'il s'agit de nombreuses coroutines, et ni en termes de facilité / transparence d'utilisation:yield
etDeferreds
partout; souvent difficile de construire certaines abstractions; traces de pile horriblement inutiles avec à la fois desDeferred
s nus ainsi que, et encore plus avec@inlineCallbacks
.IReactorProcess.spawnProcess
.J'utilise personnellement Gevent 1.0rc2 avec Twisted 12.3 ponté par
geventreactor
. J'ai implémenté mes propres ajouts et améliorations non encore publiésgeventreactor
que je publierai bientôt, avec un peu de chance dans le cadre dugeventreactor
dépôt GitHub original de: https://github.com/jyio/geventreactor .Ma disposition actuelle me permet de programmer dans le joli modèle de programmation de Gevent, et de tirer parti de choses telles qu'un non-bloquant
socket
,urllib2
et d'autres modules. Je peux utiliser du code Python ordinaire pour faire des choses régulières, par opposition à la courbe d'apprentissage et à l'inconvénient de faire même des choses simples et basiques à la manière Twisted. Je peux également facilement utiliser la plupart des bibliothèques tierces qui sont normalement soit hors de question avec Twisted, soit nécessitent l'utilisation de threads.Je peux également éviter complètement la programmation basée sur les callbacks maladroite et souvent trop complexe en utilisant des greenlets (au lieu de
Deferred
s et de callbacks, et / ou@inlineCallbacks
).(Cette réponse a été rédigée sur la base de mes expériences personnelles ayant utilisé à la fois Twisted et Gevent dans des projets réels, avec beaucoup plus d'expérience en utilisant Twisted (mais je ne prétends pas être un expert de Twisted). Le logiciel que j'ai dû écrire n'a pas Vous n'avez pas eu à utiliser trop de fonctionnalités de Twisted, donc selon l'ensemble de fonctionnalités dont vous avez besoin de Twisted, la complexité supplémentaire (relativement indolore) du mélange de Gevent et de Twisted ne vaut peut-être pas la peine.)
la source