美文网首页
tornado中,异步执行阻塞代码

tornado中,异步执行阻塞代码

作者: 第八共同体 | 来源:发表于2017-12-27 12:10 被阅读0次
    import time
    import datetime
    import tornado.ioloop
    import tornado.web
    import tornado.gen
    import tornado.concurrent
    from concurrent.futures import ThreadPoolExecutor
    
    class MainHandler(tornado.web.RequestHandler):
        executor = ThreadPoolExecutor(10)
        @tornado.gen.coroutine
        def get(self):
            future = ThreadPoolExecutor().submit(self.blocksleep)
            yield tornado.gen.with_timeout(datetime.timedelta(10), future,
                                           quiet_exceptions=tornado.gen.TimeoutError)
            self.write("Hello, world")
    
        @tornado.concurrent.run_on_executor
        def blocksleep(self):
            time.sleep(20)
            return
    
    
    def make_app():
        return tornado.web.Application([
            (r"/", MainHandler),
        ])
    
    if __name__ == "__main__":
        app = make_app()
        app.listen(8888)
        tornado.ioloop.IOLoop.current().start()
    

    相关文章

      网友评论

          本文标题:tornado中,异步执行阻塞代码

          本文链接:https://www.haomeiwen.com/subject/icfugxtx.html