如何在Tornado Web服务中达到异步请求的目的

时间:2018-07-24 08:59:23

标签: python web tornado

问题:我为模型设置了基于tonardo的Web服务。随着请求并发性的增加,网络将很容易关闭。

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

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()

1 个答案:

答案 0 :(得分:0)

在龙卷风中,任何慢速的操作都必须在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)