Tornado调用回调函数,无需等待结果

时间:2013-08-22 10:38:16

标签: asynchronous tornado asynccallback

我有一个使用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")

现在,我使用浏览器进入localhost,它将等待3秒然后打印结果“OK”。 我不关心结果,如何编码浏览器立即打印“OK”而不必等待3s?

谢谢!

1 个答案:

答案 0 :(得分:2)

(这里的内存消失)

self.process返回一个Future,所以你可以做一些简单的事情:

 @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"""

您应该执行self.finish("OK"),因为这会关闭异步。