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()
    
  • 相关阅读:
    [TC_SRM_466]DrawingBlackCrosses
    [POJ3254]Corn Fields
    [openjudge6043]哆啦A梦的时光机
    网络流 24 题汇总(LOJ 上只有 22 题???)
    Xadmin组件的url设计
    《今日简史》一、旧故事已然崩坏,新故事尚未构建
    《人类简史》二、认知革命——上帝之手的秘密
    ORM复习
    无拘无束的爱情
    使用代理导致IE host被修改问题的解决方案
  • 原文地址:https://www.cnblogs.com/moonlord/p/6296906.html
Copyright © 2011-2022 走看看