Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why use Tornado and Flask together?

As far as I can tell Tornado is a server and a framework in one. It seems to me that using Flask and Tornado together is like adding another abstraction layer (more overhead). Why do people use Flask and Tornado together, what are the advantages?

like image 612
3k- Avatar asked Oct 31 '12 17:10

3k-


People also ask

Is Tornado better than Flask?

Tornado is, for the most part, as bare-bones as Flask, but with a major difference: Tornado is built specifically to handle asynchronous processes. That special sauce isn't terribly useful in the app we're building in this series, but we'll see where we can use it and how it works in a more general situation.

What is special about a Flask?

Unlike the Django framework, Flask is very Pythonic. It's easy to get started with Flask, because it doesn't have a huge learning curve. On top of that it's very explicit, which increases readability. To create the “Hello World” app, you only need a few lines of code.

What is Tornado used for?

Tornado is a Python web framework and asynchronous network library, originally developed at FriendFreed. Tornado uses non-blocking network-io. Due to this, it can handle thousands of active server connections. It is a saviour for applications where long polling and a large number of active connections are maintained.

Does Flask use multithreading or multiprocessing?

As of Flask 1.0, flask server is multi-threaded by default. Each new request is handled in a new thread. This is a simple Flask application using default settings.


2 Answers

According to this question it is because Flask is blocking and Tornado is non-blocking.

If one uses Tornado as a WSGI server and Flask for url routing + templates there shouldn't be any overhead. With this approach you aren't using Flask's web server, so there isn't really an extra layer of abstraction.

However, if one is using Flask just for the templates they could use Tornado with Jinja2 which is the template engine that Flask uses.

like image 153
Nathan Villaescusa Avatar answered Sep 22 '22 13:09

Nathan Villaescusa


I always thought using Flask & Tornado together was stupid, but it actually does make sense. It adds complexity though; my preference would be to just use Tornado, but if you're attached to Flask, then this setup works.

Flask is (reportedly) very nice to use, and simpler than Tornado. However, Flask requires a WSGI server for production (or FCGI, but that's more complicated). Tornado is pretty simple to setup as a WSGI server:

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() 

In this situation the developer just needs to worry about the Flask app. Tornado just acts as a server.

It's also possible to handle some requests (for example, websockets, which don't play nice with WSGI) using Tornado, and still do the majority of your work in Flask. In theory, you'll get the simplicity of Flask with the async performance of Tornado.

like image 26
Cole Maclean Avatar answered Sep 18 '22 13:09

Cole Maclean