【问题标题】:How to reach the aim of asynchronous request in the Tornado web service如何在 Tornado Web 服务中达到异步请求的目的
【发布时间】:2018-07-24 08:59:22
【问题描述】:

问题:我为我的模型设置了一个基于 tonardo 的 Web 服务。并且随着请求并发的增加,web 很容易被拒绝。

我尝试过的:我已经尝试阅读了一些相关代码,例如tornado中的异步框架,但我无法获得有效的想法。

web服务代码如下:

class mainhandler(tornado.web.RequestHandler):
    def get(self):
        self.write('hello')

    def post(self):
        in_data = json.loads(self.request.body.decode('utf-8'))
        res = predict(in_data)
    def set_default_headers(self):
        self.set_header('content_type', 'application/json;charset=utf-8')

application = tornado.web.Application([(r'/', mainhandler)])

if __name__ == "__main__":
    application.listen(port=5000)
    tornado.ioloop.IOloop.current().start()

【问题讨论】:

    标签: python web tornado


    【解决方案1】:

    在 Tornado 中,任何缓慢的东西都必须在带有 await 的协程中调用。如果predict 自己做一些I/O,它应该被做成一个协程,这样它就可以异步地做那个I/O。如果是纯计算,你应该在线程池上运行它:

    async def post(self):
        in_data = json.loads(self.request.body.decode('utf-8'))
        res = await IOLoop.current().run_in_executor(None, predict, in_data)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2012-01-07
      • 2014-03-07
      相关资源
      最近更新 更多