look here, maybe it will help:
http://groups.google.com/group/python-tornado/browse_thread/thread/ae9b7527bf3d8948
On 2 oct, 11:08, Li jiaming <
li.jiam...@gmail.com> wrote:
> I created a simple app with gen.task. But seems doesn't work
> asynchronously. I try to call /sleep for multiple times, but it handles
> request in sequence.
>
> import tornado.ioloop
> import tornado.web
> from tornado.web import asynchronous
> from tornado import gen
> import time
> import tornado.httpserver
>
> class MainHandler(tornado.web.RequestHandler):
> def get(self):
> print 'receive root request'
> self.write("Hello, world")
>
> class SleepHandler(tornado.web.RequestHandler):
> @asynchronous
> @gen.engine
> def get(self):
> print 'receive sleep request'
> yield [ gen.Task(self.sleep, 10),
> gen.Task(self.sleep, 9)]
> self.write("Wake up")
> self.finish()
>
> def sleep(self, sec, callback):
> print 'sleep for %d seconds' % sec
> time.sleep(sec)
> print 'finish sleep %d' % sec
> return callback()
>
> application = tornado.web.Application([
> (r"/", MainHandler),
> (r"/sleep", SleepHandler),
> ])
>
> if __name__ == "__main__":
> server = tornado.httpserver.HTTPServer(application)
> server.listen(8888)
> tornado.ioloop.IOLoop.instance().start()
>
> *Anything wrong in my code?*
>
> I also tried async_callback (which is claimed to be obsoleted way of doing
> async). But it works. It can handle multiple requests in parallel when
> calling /sleep.
>
> class SleepHandler(tornado.web.RequestHandler):
> @asynchronous
> def get(self):
> print 'receive sleep request'
> self.async_callback(self.callback_sleep, 10)
>
> def callback_sleep(self, sec):
> print 'callback sleep for %d seconds' % sec
> time.sleep(sec)
> print 'finish callback sleep for %d seconds' % sec
> self.write('wake up')
> self.finish()