测试两个接口

# -*- 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秒能处理更多的请求。但是如果接口耗时100秒,提高并发需要设置几十个进程几百个线程来弥补,资源消耗很大,还是需要使用异步。

python tornado异步性能测试的更多相关文章

  1. Python Web框架 tornado 异步原理

    Python Web框架 tornado 异步原理 参考:http://www.jb51.net/article/64747.htm 待整理

  2. Python web框架 Tornado异步非阻塞

    Python web框架 Tornado异步非阻塞   异步非阻塞 阻塞式:(适用于所有框架,Django,Flask,Tornado,Bottle) 一个请求到来未处理完成,后续一直等待 解决方案: ...

  3. tornado异步请求的理解(转)

    tornado异步请求的理解 http://www.kankanews.com/ICkengine/archives/88953.shtml 官网第一段话: Tornado is a Python w ...

  4. Python开源异步并发框架

    Python开源异步并发框架的未来 2014年3月30日,由全球最大的中文IT社区CSDN主办的“开源技术大会·” (Open Source Technology Conference ,简称OSTC ...

  5. 使用Tornado异步接入第三方(支付宝)支付

    目前国内比较流行的第三方支付主要有支付宝和微信支付,博主最近研究了下如何用Python接入支付宝支付,这里我以Tornado作为web框架,接入支付宝构造支付接口. 使用Tornado异步接入支付宝支 ...

  6. Tornado异步非阻塞的使用以及原理

    Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其 非阻塞的方式和对 epoll 的运用,Tornado ...

  7. (转)Python黑魔法 --- 异步IO( asyncio) 协程

    转自:http://www.jianshu.com/p/b5e347b3a17c?from=timeline Python黑魔法 --- 异步IO( asyncio) 协程 作者 人世间 关注 201 ...

  8. Tornado异步(2)

    Tornado异步 因为epoll主要是用来解决网络IO的并发问题,所以Tornado的异步编程也主要体现在网络IO的异步上,即异步Web请求. 1. tornado.httpclient.Async ...

  9. Python Tornado框架(TCP层)

    Tornado在TCP层里的工作机制 上一节是关于应用层的协议 HTTP,它依赖于传输层协议 TCP,例如服务器是如何绑定端口的?HTTP 服务器的 handle_stream 是在什么时候被调用的呢 ...

随机推荐

  1. Android——listview android:cacheColorHint,android:listSelector属性作用

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用的依 ...

  2. UI设计 - 首页(主页)的任务

    什么是首页 首页,又可以叫主页,是我们的网站或者APP的主要页面,它是我们接触的第一个页面(如果不包含闪屏页和登陆页的话). 特点 首页是一个开始的地方,我们开始真正接触网站提供给我们的内容. 首页是 ...

  3. Redis键

    Redis的keys命令用于管理键.使用Redis的keys命令语法如下所示: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 例子 redis 127.0. ...

  4. 【C】——动态库中函数的作用范围

    如何生成动态库 net小伙 已经在此文中说明——[C]——如何生成静态库和动态库:接下来就要看看动态库中函数的作用范围: 首先我们使用命令   gcc -fPIC -shared -o libtest ...

  5. spring boot @ConditionalOnxxx相关注解总结

    Spring boot @ConditionalOnxxx相关注解总结 下面来介绍如何使用@Condition public class TestCondition implements Condit ...

  6. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树 ...

  7. jQuery笔记-插件开发小技巧

    jQuery官方文档上推荐开发插件时要按下面格式来写,我第一次看源代码时看到这样的写法,被郁闷了好半天. (function($) {// Code goes here})(jQuery); 下面将记 ...

  8. 前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误。    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected est

    前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误. Caused by: ...

  9. SAP的战略企业管理功能介绍

    目         录 1.        总述 2.        SAP SEM- 战略管理 3.        SAP SEM- 绩效测评 4.        SAP SEM- 业务合并 5.  ...

  10. SpagoBI 教程 Lesson 4: BIRT Reports

    SpagoBI Lesson 4: BIRT Reports BIRT BIRT is the acronym for Business Intelligence and Reporting Tool ...