Question

I have a server code using Tornado:

class mHandle(tornado.web.RequestHandler):

     @gen.coroutine
     def process(self, data):
         yield gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 3)


     @tornado.web.asynchronous
     @gen.coroutine
     def get(self):
         _data = self.get_argument('data', default='')
         yield gen.Task(self.process, _data)
         self.write("OK")

And now, I using browser to enter localhost, it will wait 3s and then print the result "OK". I don't care about result, how to code to browser print "OK" immediately without having to wait 3s?

Thanks!

Was it helpful?

Solution

(going off of memory here)

self.process returns a Future, so you could do something simple like:

 @tornado.web.asynchronous
 @gen.coroutine
 def get(self):
     _data = self.get_argument('data', default='')

    ioloop.add_future(self.process(_data), self.process_complete)
    self.write("OK")

 def process_complete(self, future):
    """Handle the error/success from the future"""

You should probably do a self.finish("OK") since that will close the async.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top