web-dev-qa-db-fra.com

Pourquoi utiliser Tornado et Flask ensemble?

Autant que je sache, Tornado est à la fois un serveur et un framework. Il me semble que l'utilisation de Flask et Tornado ensemble, c'est comme ajouter une autre couche d'abstraction (plus de surcharge). Pourquoi les gens utilisent-ils Flask et Tornado ensemble, quels sont les avantages?

35
3k-

Selon cette question c'est parce que Flask bloque et Tornado ne bloque pas.

Si l'on utilise Tornado comme serveur WSGI et Flask pour le routage d'URL + modèles il ne devrait pas y avoir de surcharge. Avec cette approche, vous n'utilisez pas le serveur Web de Flask , il n'y a donc pas vraiment de couche d'abstraction supplémentaire.

Cependant, si l'on utilise Flask juste pour les modèles, ils pourraient utiliser Tornado avec Jinja2 qui est le moteur de modèle que Flask utilise .

52
Nathan Villaescusa

J'ai toujours pensé que l'utilisation de Flask & Tornado ensemble était stupide, mais cela a du sens. Cela ajoute de la complexité cependant; ma préférence serait d'utiliser simplement Tornado, mais si vous êtes attaché à Flask, alors cette configuration fonctionne.

Flask est (apparemment) très agréable à utiliser et plus simple que Tornado. Cependant, Flask nécessite un serveur WSGI pour la production (ou FCGI, mais c'est plus compliqué). Tornado est assez simple à installer en tant que serveur WSGI:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()

Dans cette situation, le développeur doit juste se soucier de l'application Flask. Tornado agit simplement comme un serveur.

Il est également possible de gérer certaines requêtes (par exemple, les websockets, qui ne jouent pas Nice avec WSGI) à l'aide de Tornado, tout en effectuant la majorité de votre travail dans Flask. En théorie, vous obtiendrez la simplicité de Flask avec les performances asynchrones de Tornado.

17
Cole Maclean

au lieu d'utiliser Apache comme serveur, vous utiliserez Tornado (bien sûr comme serveur de blocage en raison de la nature synchrone de WSGI).

2
Abdelouahab Pp

Utilisez chacun pour ce qu'il y a de mieux, mais sachez que le mix n'obtient pas toujours les gains de performance que vous recherchez.

Ce benchmark, https://Gist.github.com/andreif/6088558 , par exemple, se demande quelle combinaison de frameworks est plus rapide, vous devez adapter l'exemple à votre cas d'utilisation principal. Dans cet exemple, flask + tornado ne fournissent pas les gains de performances attendus.

0
Rogelio