美文网首页
Tornado的性能改善(一):线程池的使用

Tornado的性能改善(一):线程池的使用

作者: TaylorWu | 来源:发表于2016-07-18 18:02 被阅读0次

    TaylorWu的博客

    Tornado的性能改善(一):线程池的使用

    编辑于:2016-07-18

    导语

    Tornado是一款优秀的开源Web框架,其简单易用,性能卓越等特性受到开发者的青睐。但是由于Tornado的单线程结构,假如执行耗时任务,此时线程则会阻塞,无法响应其他请求。下面就我对Tornado使用的经验,对其性能作出改善。

    一. 线程池提高并发处理量

    1. 使用Tornado自带的concurrent的语法糖run_on_executor。

    2. 使用Python自带的concurrent的ThreadPoolExecutor线程池库。

    代码区间

    from tornado.concurrent import run_on_executor

    from concurrent.futures import ThreadPoolExecutor

    import time

    class Test():

    executor = ThreadPoolExecutor(10)      #set up a threadpool

    @run_on_executor

    def longTimeTask():

    print "go to sleep"

    time.sleep(20)      #go to sleep

    print "wake up"

    if __name__ == "__main__":

    test = Test()

    test.longTimeTask()

    print "print very soon"

    上述例子当中,executor为初始化的线程池对象,而Test类中的longTimeTask被语法糖run_on_executor包裹,将该函数的执行传递给线程池executor的线程执行,优化了处理耗时性任务,以致达到不阻塞主线程的效果。

    其实,上述的采用线程池优化并不是最优方案。耗时任务,通常涉及IO,其中常见的操作即是写日志,写数据库等数据持久化操作。此时我们更可以采取分布式任务队列的方式来进行优化。常见的有Celery + RabbitMq + Redis方案构建分布式任务队列系统。

    相关文章

      网友评论

          本文标题:Tornado的性能改善(一):线程池的使用

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