3

我有一个使用 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”而无需等待 3 秒?

谢谢!

4

1 回答 1

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")因为这将关闭异步。

于 2013-08-23T05:05:35.203 回答