Don't use Tornado unless you plan to build a full SOA. Python drivers are blocking by default and Tornado offers no support for that, meaning Tornado blocks if you have database calls in your code.
Use gevent. Huge community. Simply works and simply scales. And it makes all your blocking calls nonblocking automatically. Tornado just blocks.
thats a bit of a simplification - you can definiltey use tornado as long as you've got a tornado compatible async driver. people using mongo, postgres, or anything with an http interface are fine. Not wanting to deal with the mental overhead of callbacks, is the reason why I no longer want to use tornado
gevent works thanks to monkey patching of a great many libraries. Its failure modes are a lot more obscure than with callbacks; you pretty much have to unwrap nonblocking calls in your mind that aren't apparent in the code.
The "simple" bit is what I love about Tornado. You only have to deal with RequestHandlers and Applications - no Flask-like automagic object proxies which make you do everything within the lifetime of a request. The API is clean and easy to hack.
That said, you can't go too far wrong picking Python web frameworks. They each have their strengths and weaknesses, but on the whole they're all fairly competitive offerings with helpful communities. If you don't find something you like then it's pretty trivial to roll-your-own from existing components like Werkzeug, WTForms, SQLAlchemy, Jinja, beaker, Mako, etc.
Built-in async operations.
Not standing in your way.
Rapid developments.
Huge community.
Simply works.
Simple, yet rich.