zoukankan      html  css  js  c++  java
  • tornado异步执行任务

    from concurrent.futures import ThreadPoolExecutor
    from functools import partial, wraps
    import time
    import tornado.ioloop
    import tornado.web
    from tornado.options import define, options
    define("port", default=8011, help="run on the given port", type=int)
    EXECUTOR = ThreadPoolExecutor(max_workers=4)
    def unblock(f):
        @tornado.web.asynchronous
        @wraps(f)
        def wrapper(*args, **kwargs):
            self = args[0]
            def callback(future):
                self.write(future.result())
                self.finish()
            EXECUTOR.submit(
                partial(f, *args, **kwargs)
            ).add_done_callback(
                lambda future: tornado.ioloop.IOLoop.instance().add_callback(
                    partial(callback, future)))
        return wrapper
    class JustNowHandler(tornado.web.RequestHandler):
        def get(self):
            self.write("i hope just now see you")
    class SleepHandler(tornado.web.RequestHandler):
        @unblock
        def get(self, n):
            import requests
            print requests.request("get","http://localhost:8101/sleep")
            return "Awake! %s" % time.time()
    # class SleepAsyncHandler(tornado.web.RequestHandler):
    #     @tornado.web.asynchronous
    #     def get(self, n):
    #         def callback(future):
    #             self.write(future.result())
    #             self.finish()
    #         EXECUTOR.submit(
    #             partial(self.get_, n)
    #         ).add_done_callback(
    #             lambda future: tornado.ioloop.IOLoop.instance().add_callback(
    #                 partial(callback, future)))
    #     def get_(self, n):
    #         time.sleep(float(n))
    #         return "Awake! %s" % time.time()
    application = tornado.web.Application([
        (r"/justnow", JustNowHandler),
        (r"/sleep/(d+)", SleepHandler)
        #(r"/sleep_async/(d+)", SleepAsyncHandler),
    ])
    if __name__ == "__main__":
        application.listen(options.port)
        tornado.ioloop.IOLoop.instance().start()
    
  • 相关阅读:
    good array(数论+随机算法)
    triple balance(贪心+构造)
    树上拓扑排序(交互题)
    模数循环节
    string操作总结
    移除相邻(string操作+implement)
    二维树状数组(单点更新+区间查询)
    docker mysql Client does not support
    Docker 常见问题
    Linux安装 Docker
  • 原文地址:https://www.cnblogs.com/moonlord/p/6296906.html
Copyright © 2011-2022 走看看