Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what does @tornado.web.asynchronous decorator mean?

Tags:

python

tornado

  1. If code didn't use this decorator, is it non-blocking?
  2. Why this name is asynchronous, it means add decorator let code asynchronous?
  3. Why @tornado.gen always use with @tornado.web.asynchronous together?
like image 457
linbo Avatar asked Jan 29 '13 12:01

linbo


People also ask

Is tornado asynchronous?

Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.

What is Tornado Coroutine?

Coroutines use the Python await keyword to suspend and resume execution instead of a chain of callbacks (cooperative lightweight threads as seen in frameworks like gevent are sometimes called coroutines as well, but in Tornado all coroutines use explicit context switches and are called as asynchronous functions).

Is tornado single threaded?

The reason is that Tornado is an asynchronous server with only one thread.


2 Answers

@tornado.web.asynchronous prevents the the RequestHandler from automatically calling self.finish(). That's it; it just means Tornado will keep the connection open until you manually call self.finish().

  1. Code not using this decorator can block, or not. Using the decorator doesn't change that in any way.

  2. As @Steve Peak said, you use the decorator for asynchronous requests, e.g. database retrieval.

  3. Updated for Tornado 3.1+: If you use @gen.coroutine, you don't need to use @asynchronous as well. The older @gen.engine interface still requires @asynchronous, I believe.

like image 65
Cole Maclean Avatar answered Oct 21 '22 18:10

Cole Maclean


  1. Answered here: asynchronous vs non-blocking

  2. Think of it like this. When you need to make a request to say a database or another url to retrieve data you do not want to block your tornado IO. So the @tornado.web.asynchronous will allow the IO to handle other requests while it waits for the content to load (ex. database or url).

  3. They are simular. You most likely will use @tornado.web.asynchronous.

    • Read more here: http://www.tornadoweb.org/documentation/gen.html
    • Example: chaining asynchronous operations before writing to client (python - tornado)
like image 22
Steve Peak Avatar answered Oct 21 '22 19:10

Steve Peak