python tornado高并发_在Centos下对高并发web框架Tornado的性能进行测试

本文介绍了在1g1核的Centos环境下,对Python异步web框架Tornado进行高并发性能测试的过程。Tornado因其底层实现的epoll异步架构,展现出优秀的并发处理能力。在测试中,Tornado每秒能处理近800个请求,远超Django的200左右并发,展示了其在解决C10K问题上的优势。
摘要由CSDN通过智能技术生成

在之前的一篇文章中,我们在1g1核的惨淡硬件环境下,对 uwsgi + django 和 gunicorn+ django 的后端服务进行性能测试,得出结论单台django在简单读库操作下只能抗住大约200左右的并发:在Centos下使用Siege对Django服务进行压力测试

这一次,我们在相同的背景下,对三大框架中,以性能著称于世的Tornado进行并发测试,看看它的性能到底有多高。

Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架。

Tornado 优秀的大并发处理能力得益于它的 web server 从底层开始就自己实现了一整套基于 epoll 的单线程异步架构。

那么,到底啥是特么的异步非阻塞呢?

同步、异步编程差异:

你打电话问书店老板有没有《python开发》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。

而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

阻塞与非阻塞的差异:

还是你打电话问书店老板有没有《python开发》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果

如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去干别的了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。

大部分Web应用都是阻塞性质的,也就是说当一个请求被处理时,这个进程就会被挂起直至请求完成,比如Django,而Tornado的思想是当我们在等待结果的时候不阻塞,转而我们给框架一个回调函数作为参数,让框架在收到结果的时候通过回调函数继续操作。这样,服务器就可以被解放去接受其他客户端的请求了。

首先,安装Tornado

pip3 install tornado

编写main.py

import tornado.ioloop

import tornado.web

import pymysql

db = pymysql.Connection(host='127.0.0.1', database='md', user='root', password='mysql',charset='utf8')

class MainHandler(tornado.web.RequestHandler):

def initialize(self,db):

self.db = db

def get(self):

cur = db.cursor()

cur.execute("select id from news where id = 1 ")

res = cur.fetchone()

print(res)

self.write("Hello, world")

def make_app():

#路由

return tornado.web.Application([

(r"/", MainHandler,dict(db=db)),

])

if __name__ == "__main__":

app = make_app()

app.listen(8000)

tornado.ioloop.IOLoop.current().start()

逻辑很简单,从数据库中读取一条数据,通过接口返回,服务监听8000端口

运行服务

python3 main.py

Tornado不同于Django,它本身是框架,同时也是一款服务器,所以不需要uwsgi这种网络模型服务。

开启压测命令:每秒255个请求持续一分钟

siege -c255 -t60S -v -b 127.0.0.1:8000

可以看到,每秒处理近800个请求毫无压力,和Django根本就不是一个量级的,对于高并发问题,我们通常用C10K这一概念来描述。C10K—— Concurrently handling ten thousandconnections,即并发10000个连接。对于单台服务器而言,根本无法承担,而采用多台服务器分布式又意味着高昂的成本,django并发数200左右,而Tornado能承担近800左右,无疑,在成本上节约了很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值