我有一个使用 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 秒?
谢谢!
最佳答案
(这里失去内存)
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")
,因为这将关闭异步。
关于asynchronous - Tornado 调用回调函数不等待结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18378146/