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

TaylorWu的博客

Tornado的性能改善(一):线程池的使用_第1张图片

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的性能改善(一):线程池的使用)