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()
    
  • 相关阅读:
    Servlet-获取页面的元素的值的方式以及区别
    Http请求-get和post的区别
    Servlet-xml配置简介以及url-pattern简介
    javaweb目录结构简介
    Servlet-生命周期简介
    tomcat-四种运行模式和三种部署模式(优化)
    命名空间System.IO
    Dictionary 字典
    导出-以虚拟表的形式获取数据源
    导入excel-uploadify+npoi
  • 原文地址:https://www.cnblogs.com/moonlord/p/6296906.html
Copyright © 2011-2022 走看看