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()
    
  • 相关阅读:
    Shiro笔记---身份验证
    网络时间获取
    网络信息获取代码2------ 慕课第10 北大唐大壮
    CentOS 修改主机名
    CentOS SELinux服务关闭与开启
    SecureCRT 上传下载
    【html】行内元素,块级元素
    【Html】第一个网页helloworld
    C++对C语言的拓展(1)—— 引用
    C++语言对C的增强(2)—— const增强、枚举的增强
  • 原文地址:https://www.cnblogs.com/moonlord/p/6296906.html
Copyright © 2011-2022 走看看