Quand utiliser Tornado, quand utiliser Twisted / Cyclone / GEvent / other [fermé]

lequel de ces cadres / bibliothèques serait le meilleur choix pour construire une application web multi-utilisateurs moderne? J'aimerais avoir un serveur asynchrone qui me permettra d'échelle facile. Quelle solution donnera la meilleure performance / évolutivité / cadre le plus utile (en termes de facilité d'utilisation et facile de développement)?

il serait grand si elle fournira de bonnes "151910920 de" fonctionnalité (websockets, rpc, streaming, etc).

Quels sont les avantages et les inconvénients de chaque solution?

176
demandé sur Wojciech Danilo 2012-12-19 01:37:38

4 réponses

" Django est un cadre Web Python de haut niveau qui encourage le développement rapide et un design propre et pragmatique" . Si vous construisez quelque chose qui ressemble à un site de commerce électronique, alors vous devriez probablement aller avec Django. Cela vous permettra de faire votre travail rapidement. Vous n'avez pas à vous soucier de trop de choix technologiques. Il fournit tout ce dont vous avez besoin du moteur de modèle à ORM. Il sera légèrement opinions sur la façon de structurer votre application, ce qui est bon Si vous me demandez. Et il a la communauté la plus forte de toutes les autres bibliothèques, ce qui signifie que l'aide facile est disponible.

" Flask est un microfram Framework pour Python basé sur Werkzeug, Jinja 2 et de bonnes intentions" . Attention - "microfram Framework" may be misleading. Cela ne signifie pas que le flacon est une bibliothèque à moitié cuit. Cela signifie le noyau de la fiole est très, très simple. Contrairement à Django, il ne prendra aucune décision technologique pour vous. Vous êtes libre de choisir n'importe quel moteur de modèle ou ORM qui vous plaît. Même s'il est livré avec le moteur de Jinja template par défaut, vous êtes toujours libre de choisir le nôtre. Pour autant que je sache, Flask est pratique pour écrire des paramètres APIs (RESTful services).

" Twisted est un moteur de réseau piloté par un événement écrit en python" . C'est un moteur de haute performance. La raison principale de sa vitesse est quelque chose appelé comme différé. Twisted est construit sur des déférements. Pour ceux d'entre vous qui ne savent pas au sujet de defereds, c'est le mécanisme à travers l'architecture asynchrone est atteint. Twisted est très rapide. Mais n'est pas adapté à l'écriture webapps conventionnels. Si vous voulez faire quelque chose de bas niveau, twisted est votre ami.

" Tornado est un framework web Python et une bibliothèque de réseau asynchrone, développé à L'origine chez FriendFeed. En utilisant l'E/S réseau non-bloquant, Tornado peut passer à des dizaines de milliers de connexions ouvertes, ce qui le rend idéal pour les longs sondages, WebSockets, et d'autres applications qui exigent une connexion de longue durée à chaque utilisateur" . Entre Django et flasque, il y a une tornade. Si vous voulez écrire quelque chose avec Django ou flasque, mais si vous avez besoin d'un meilleur performance, vous pouvez opter pour Tornado. il peut gérer très bien le problème C10k s'il est bien construit.

" Cyclone est un framework de serveur web pour Python qui implémente L'API Tornado comme un protocole tordu" . Maintenant, que faire si vous voulez quelque chose qui est presque aussi performant que Twisted mais facile à écrire webapps conventionnels? Dis bonjour au cyclone. Je préférerais un Cyclone à une tornade. Il a une API C'est très similaire à Tornado. En fait, c'est une fourchette de tornade. Mais le problème est qu'elle a une communauté relativement petite. Alexandre Fiori est le seul grand commettant du repo.

" Pyramid est un cadre général de développement D'applications Web Python open source. Son but premier est de faciliter la création d'applications web par un développeur Python." Je n'ai pas vraiment utilisé Pyramid, mais je suis allé à travers la documentation. De ce que je comprends, pyramide est très similaire à flacon et je pense que vous pouvez utiliser pyramide partout flacon semble approprié et vice-versa.

EDIT : toute demande de révision de tout autre cadre est la bienvenue!

Source: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html

208
répondu dhilipsiva 2014-11-24 15:45:05

c'est évidemment une réponse quelque peu biaisée , mais ce n'est pas la même chose qu'une réponse fausse ; vous devriez toujours utiliser Twisted. J'ai déjà répondu à des questions similaires , mais puisque votre question n'est pas tout à fait la même, voici quelques raisons:

"Meilleure Performance "

Twisted surveille en continu nos performances au speed.twistedmatrix.com site web. Nous avons également été l'un des premiers projets à être suivi par le site similaire de PyPy , assurant ainsi la bonne performance de Twisted à l'exécution que toute personne concernée par les applications haute performance en Python.

"évolutivité "

à ma connaissance, aucun des cadres énumérés n'a de support intégré pour l'échelle automatique; ils sont tous des cadres de communication, donc vous devez faire le travail pour communiquer entre vos noeuds de mise à l'échelle. Cependant, Twisted a un avantage dans son support intégré pour le multi-traitement local . En toute justice, il y a un add-on 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 de partager le travail entre les cœurs, et les travaux se poursuivent dans ce domaine. Twisted a aussi un couple de bien intégré , " natif " les protocoles RPC qui offrent une construction-kit pour n'importe quel langage de mise à l'échelle que vous voulez poursuivre.

"Très Utile "

Beaucoup de gens semblent trouver Tordu", 1519350920" très utile . tant et Si bien que beaucoup d'entre eux ont étendu et leurs extensions disponibles pour vous.

" fonctionnalité"

sortie de la boîte, tordue comprend:

dans ce dernier département, au moins, Twisted semble un gagnant clair pour la fonctionnalité intégrée. Et tout cela, dans un paquet d'un peu plus de 2 mégaoctets!

55
répondu Glyph 2017-05-23 11:47:28
Tornado , que je préfère et qui a récemment gagné en popularité. Tornado, comme Twisted, utilise une programmation de type callback, mais il peut être inliné en utilisant tornado.gen.engine ( twisted.internet.inlineCallbacks dans Twisted).

Codebase

le meilleur commentaire est de http://cyclone.io site. cyclone tente de mélanger tordue et Tornade parce que:

Tordu est l'un des plus bibliothèques matures pour les e/s non bloquantes disponibles à la public. Tornado est la version open source du serveur web D'FriendFeed, un des serveurs web les plus populaires et rapides pour Python, avec un API décent pour la construction d'applications web.

l'idée est de combler L'élégante et simple API Tornado pour La boucle D'événements de Twisted, permettant un grand nombre de protocoles pris en charge.

mais en 2011 tornado.platform.twisted était sorti apporte des fonctionnalités similaires.

Performance

Tornade a beaucoup mieux performance . Il fonctionne également de façon transparente avec PyPy, et obtenir un gain énorme.

évolutivité

la même chose que Twisted. Tornado a tornado.process et beaucoup de services rpc mis en œuvre en plus de celui-ci.

fonctionnalité

il y a 71 Paquet basé sur la tornade, comparé à 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 paquets tordus sont les plus anciens, puis Gevent et Tornado les plus frais. En outre, il ya tornado.platform.twisted module qui vous permet de run code écrit pour Twisted sur Tornado .

résumé

avec Tornado vous pouvez utiliser un code de Twisted. Il n'est pas nécessaire d'utiliser le cyclone qui seulement twists votre code (votre code devient plus embrouillé).

quant à 2014, Tornado est considéré comme largement accepté et par défaut async framework qui fonctionne à la fois sur python2 et python3. Aussi la dernière version 4.x apporte beaucoup de fonctionnalités de https://docs.python.org/dev/library/asyncio.html .

j'ai écrit un article, expliquant pourquoi je considère que tornade - Le Meilleur Python web framework où j'ai écrit beaucoup plus sur la fonctionnalité Tornado.

46
répondu Robert Zaremba 2015-03-01 14:54:44

( UPDATE : je suis tristement surpris de voir que peu de réponses ici recommandent ou même mentionnent Gevent-Je ne pense pas que ce soit proportionnel à la popularité, la performance et la facilité d'utilisation de cette excellente bibliothèque!)

Gevent et Twisted ne s'excluent pas mutuellement, même si le contraire peut sembler évident à première vue. Il existe un projet appelé geventreactor qui permet de tirer relativement facilement parti du meilleur des deux mondes, à savoir:

  • efficace et pas cher (coopérative vert) modèle de thread de Gevent, qui est beaucoup plus facile à programmer quand il s'agit de la simultanéité-franchement, Tordu inlineCallbacks est tout simplement pas à la hauteur de la tâche en termes de performances quand il s'agit de beaucoup de coroutines, et ni en termes de facilité/la transparence de l'utilisation: yield et Deferreds partout; souvent difficile de construire des abstractions; horriblement inutiles, les traces de pile avec les deux nus Deferred s ainsi comme, et encore plus avec @inlineCallbacks .
  • Toutes les fonctionnalités intégrées de Tordu, vous pouvez toujours rêver, y compris, mais non limité à IReactorProcess.spawnProcess .

j'utilise personnellement Gevent 1.0rc2 avec Torsadé 12.3 ponté par geventreactor . J'ai mis en place mes propres ajouts et améliorations non encore publiés à geventreactor que je publierai bientôt, avec un peu de chance dans le cadre du dépôt original Github de geventreactor : https://github.com/jyio/geventreactor .

ma mise en page actuelle me permet de programmer dans le modèle de programmation nice de Gevent, et de tirer parti de choses comme un non-blocage socket , urllib2 et d'autres modules. Je peux utiliser le code Python régulier 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 de façon détournée. Je peux aussi facilement utiliser la plupart des bibliothèques de tiers qui sont normalement soit hors de question Tordues, ou exiger l'utilisation de threads.

je peux aussi éviter complètement la programmation basée sur des appels maladroits et souvent trop complexes en utilisant des greenlets (au lieu de Deferred et des callbacks, et/ou @inlineCallbacks ).

(cette réponse a été écrite sur la base de mes expériences personnelles ayant utilisé Twisted et Gevent dans des projets de la vie réelle, avec beaucoup plus d'expérience en utilisant Twisted (mais je ne prétends pas être un Twisted expert.) Le logiciel que j'ai eu à écrire n'a pas eu à utiliser trop de fonctionnalités de Twisted, donc en fonction de l'ensemble des fonctionnalités que vous exigez de Twisted, la (relativement indolore) complexité supplémentaire de mélanger Gevent et Twisted pourrait ne pas valoir le coup.)

14
répondu Erik Allik 2013-09-27 10:03:02