码迷,mamicode.com
首页 > 编程语言 > 详细

python tornado异步性能测试

时间:2018-04-30 11:51:50      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:设置   ati   serve   校验   授权   网站   程序   handler   help   

测试两个接口

# -*- coding:utf-8 -*-

import time
import tornado.web
import tornado.gen
import tornado.ioloop
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor


class SyncHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        time.sleep(5)  # sleep用来简单指代某个耗时的io操作
        self.write("同步的Hello World")


class AsyncHandler(tornado.web.RequestHandler):
    executor = ThreadPoolExecutor(5)

    @tornado.gen.coroutine
    def get(self):
        resp = yield self.sleep_for_result()
        self.write(resp)

    @run_on_executor
    def sleep_for_result(self):
        time.sleep(5)
        return 异步的Hello World


application = tornado.web.Application([
    (r/sync, SyncHandler),
    (r/async, AsyncHandler),
])

if __name__ == "__main__":
    from tornado.options import options, define

    define("port", default=8080, help="跑在8080", type=int)

    http_server = tornado.httpserver.HTTPServer(application)
    http_server.bind(options.port)
    http_server.start(1)  # 进程数量
    tornado.ioloop.IOLoop.instance().start()

 

启动tornado服务。

这里不使用ab测试,使用更灵活的代码线程池测试性能,使用线程池并发方式请求接口

 

#coding=utf8
import requests
import time
from tomorrow import threads

@threads(10)
def test_sync():
    print requests.get(http://127.0.0.1:8080/sync).content +          + time.strftime(%H:%M:%S)

@threads(10)
def test_async():
    print requests.get(http://127.0.0.1:8080/async).content +          + time.strftime(%H:%M:%S)


[test_sync() for i in range(100)]

#[test_async() for i in range(100)]

 

同步方式测试如下:

技术分享图片

看以看到,10线程请求同步接口时候,是每隔5秒才能领处理完成一个请求。程序中设置的tornado进程是1,如果把tornado服务的进程数量提高为4,每5秒也能处理4个同步请求。

 

异步方式测试如下:

技术分享图片

看以看到,10线程请求异步接口时候,是每隔5秒能处理5个请求,因为代码中设置的ThreadPoolExecutor(5)数量是5。如果设置为8,那么每5秒可以处理8个请求。

 

在做联通 央行征信基于用户授权的登录系统时候,需要校验用户提交的账号密码验证码,加上使用代理ip时间很不稳定,校验用户提交的账号密码是否能够登录三方网站时候需要大量时间,就需要使用tornado这种异步方式了,不然用户提交账号密码后需要很长时间才能得到反馈,用户体验就很糟糕。

 

如果使用django的,使用自带服务,每5秒能处理1个请求,其他的请求都必须等待上一个请求结束,才能被处理。

但django使用uwsgi部署,不会像自带服务表现这么差,使用uwsgi部署时候一般都会设置进程数量和线程数量,部署后每5秒能处理更多的请求。

 

 

 

python tornado异步性能测试

标签:设置   ati   serve   校验   授权   网站   程序   handler   help   

原文地址:https://www.cnblogs.com/ydf0509/p/8972901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!