python高性能web框架——Japronto
近期做了一个简单的demo需求,搭建一个http server,支持简单的qa查询。库中有10000个qa对,需要支持每秒10000次以上的查询请求。
需求比较简单,主要难点就是10000+的RPS。首先使用python + uwsgi写了个简单的demo,压测后发现,RPS只有几千,达不到性能要求。后来部署了多个服务,使用nginx做负载均衡才勉强达到需求。
Japronto
后来经过google 搜索,发现了Japronto,github地址https://github.com/squeaky-pl/japronto,性能非常强悍,可以看下作者提供的性能图:
为什么可以有这么高的性能,因为Japronto 做了大量优化,其中最主要的是HTTP pipelining,Japronto 用它来做执行并发请求的优化。大多数服务器把来自客户端的pipelining和non-pipelining请求都一视同仁,用同样的方法处理,并没有做针对性的优化。
其他细节可以参考 https://medium.freecodecamp.org/million-requests-per-second-with-python-95c137af319 和 https://github.com/squeaky-pl/japronto
测试
采用docker的方式进行部署的,按照官网的例子
1、拉取镜像
docker pull japronto/japronto
2、编写测试代码
# examples/1_hello/hello.py
from japronto import Application # Views handle logic, take request as a parameter and
# returns Response object back to the client
def hello(request):
return request.Response(text='Hello world!') # The Application instance is a fundamental concept.
# It is a parent to all the resources and all the settings
# can be tweaked here.
app = Application() # The Router instance lets you register your handlers and execute
# them depending on the url path and methods
app.router.add_route('/', hello) # Finally start our server and handle requests until termination is
# requested. Enabling debug lets you see request logs and stack traces.
app.run(debug=True)
3、启动docker 容器
docker run -p 8080:8080 -v $(pwd)/hello.py:/hello.py japronto/japronto --script /hello.py
使用wrk进行压测,使用 单线程,100个连接,压测30s。结果如下
wrk -c 100 -t 1 -d 30s http://192.168.86.10:8077/ Running 30s test @ http://192.168.86.10:8077/
1 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.88ms 548.76us 17.70ms 88.46%
Req/Sec 53.43k 2.40k 54.86k 96.33%
1593994 requests in 30.02s, 139.85MB read
Requests/sec: 53104.58
Transfer/sec: 4.66MB
压测结果受服务器,运行方式等影响,虽然和给出的数据相差较大,但是性能也是非常强悍的。
不过比较遗憾的是,目前这个项目已经暂停更新了
python高性能web框架——Japronto的更多相关文章
- python 高性能web框架 gunicorn+gevent
参考链接: http://rfyiamcool.blog.51cto.com/1030776/1276364/ http://www.cnblogs.com/nanrou/p/7026789.html ...
- python各种web框架对比
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- python 实现web框架simfish
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
- Python之Web框架们
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- python之web框架(3):WSGI之web应用完善
python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...
- python之web框架(2):了解WSGI接口
python之web框架(2):了解WSGI接口 1.什么是wsgi接口: wsgi:Web Service Gateway Interface.它不是模块,而只是一种规范,方便web服务器和各种框架 ...
随机推荐
- 前端学习 --Css -- 子元素的伪类
:first-child 寻找父元素的第一个子元素,在所有的子元素中排序: :last-child 寻找父元素的最后一个子元素,在所有的子元素中排序: :nth-child 寻找父元素中的指定位置子元 ...
- Android Layout_weight 属性
Android 对Layout_weight属性完全解析以及使用ListView来实现表格http://blog.csdn.net/xiaanming/article/details/13630837 ...
- 如何修改Windows程序的权限?
修改程序的权限需要用到3个函数: 1. 获取进程的令牌句柄: OpenProcessToken 2. 查找特权类型的ID: LookupPrivilegeValue 3. 修改进程的特权:Adjust ...
- 21天实战caffe笔记_第一天
1 深度学习术语 深度学习常用名词:有监督学习.无监督学习.训练数据集.测试数据集.过拟合.泛化.惩罚值(损失loss); 机器自动学习所需三份数据:训练集(机器学习的样例),验证集(机器学习阶段,用 ...
- [python]python安装包错误
“UnicodeDecodeError: ‘ascii’ codec can’t decode : ordinal not )” 在windows XP上 解决方法: Solution: ====== ...
- 项目经验总结-twice
1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的.为类指定 ...
- 自定义UITableViewCell的方法
1.纯XIB/storyboard自定义.对应一个Controller的storyboard上拖拽出一个自定义Cell,并加上ReuseIdentifitor 2.纯代码自定义,通过在contentV ...
- 安装并使用 Wowza 发布你的 RTMP 直播流
转载自:http://blog.csdn.net/defonds/article/details/11979095 I. 下载 Wowza 官方下载地址 http://www.wowz ...
- python---重点(设计模式)
前戏:设计模式简介 设计模式是面向对象设计的解决方案,是复用性程序设计的经验总结.(与语言无关,任何语言都可以实现设计模式) 设计模式根据使用目的的不同而分为创建型模式(Creational Patt ...
- 浅谈splay(点的操作)
浅谈splay(点的操作) 一.基本概念 splay本质:二叉查找树 特点:结点x的左子树权值都小于x的权值,右子树权值都大于x的权值 维护信息: 整棵树:root 当前根节点 sz书上所有结点编号 ...