asynchronous - Tornado 调用回调函数不等待结果

标签 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”而无需等待 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/

相关文章:

c# - 异步调用新手问题

javascript - 加载 Javascript : HTTP Requests -v- Asynchronous Loading

python - 运行 Tornado AsyncHTTPTestCase 时获取错误文件描述符

python - 在Python中导入模块

python tornado用户认证,然后通过apache反向代理

javascript - 更新 mongoose schema.save 中的 `let` 变量

c++ - 为什么在使用线程池时对 boost::async 的嵌套调用会阻塞?

c# - 异步读取文件

c# - 回调函数 : passing callbacks from a C# winform app to a referenced VC++ Exe

c# - C# .NET 3.5 中的 AsyncCallback 问题