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

  

 压测结果受服务器,运行方式等影响,虽然和给出的数据相差较大,但是性能也是非常强悍的。

不过比较遗憾的是,目前这个项目已经暂停更新了

原文地址:https://www.cnblogs.com/lilinwei340/p/9565126.html

时间: 2024-07-29 11:24:10

python高性能web框架——Japronto的相关文章

第一篇:Python高性能Web框架Tornado原理剖析

本系列博文计划: 1.剖析基于Python的Web框架Tornado的源码 2.为Python开发一个完善的MVC框架 首先将带着大家一起来剖析基于python编写的Web框架 tornado ,本着易读易懂的目标来写这一系列,寄希让小白也能zeng明白其中的道理,与其说剖析还不如说是白话,因为本系列都会用通俗的语言去描述Web框架中的各个知识点. 一个脚本引发的一场"血案".... 运行脚本并在浏览器上访问http://127.0.0.1:8080 #!/usr/bin/env py

第二篇:Python高性能Web框架tornado源码剖析之待请求阶段

上篇<第一篇:Python高性能Web框架Tornado原理剖析>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestH

python 高性能web框架 gunicorn+gevent

参考链接: http://rfyiamcool.blog.51cto.com/1030776/1276364/ http://www.cnblogs.com/nanrou/p/7026789.html 前言 gunicorn 是支持wsgi协议的http服务器,gevent只是它支持的模式之一,是为了解决django.flask这些web框架自带wsgi server性能低下的问题.自带的web server更多的是测试用途,线上发布时,最好使用高性能的wsgi server 或者是联合ngin

Python之Web框架介绍

所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来 Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理 Python的Web框架分成了两类, 即包含socket也包含业务逻辑处理的(tornado) 不包含socket(框架本身通过第三方模块实现socket)只包含业务逻辑处理(django,Flask) WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具

测试Flask+PYTHON的WEB框架

参数URL: http://blog.csdn.net/qwiwuqo/article/details/8970621 安装flask之前,你必须要先安装python和easy_install. 安装 virtualenv,这个主要是用来做解释器环境隔离的,避免同一机器上的多个python或者多个python的库依赖. 然后cd到myvir目录的Scripts下输入activate.bat,就进入了虚拟环境了,然后输入easy_install Flask. 测试Flask+PYTHON的WEB框

erlang 一个高性能web框架 Cowboy 的使用笔记

环境:ubuntu_server 1210 目的:构建web版hello world程序 参考链接:http://roberto-aloi.com/blog/2013/07/13/create-deploy-erlang-cowboy-application-heroku/ 1.使用rebar 构建一个项目的基础目录 首先获取rebar工具 $ git clone https://github.com/rebar/rebar.git $ cd rebar $ ./bootstrap $ cd .

Python之Web框架Django

Python之Web框架: Django 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 #web框架的基础结构,几乎所有开发者都是基于此基础结果进行扩展. 5 6 import socket 7 8 def handle_request(client): 9 buf = client.recv(1024) 10 clien

python 实现web框架simfish

python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供了简单的simple_server, wsgiref.simple_server.make_server(host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler) 官方提供的例子, from wsgiref

python bottle web框架简介

Bottle 是一个快速,简单,轻量级的 Python WSGI Web 框架.单一文件,只依赖 Python 标准库 .bottle很适合会一点python基础的人使用,因为这框架用起来很简单,只要你会python基础语法,有一点WEB知识,就可以开发出很不错的WEB.学了python的运维人员,压根不需要django框架,就可以运维工具了,毕竟django学习起来,比较复杂,学习时间也长,我们有必要一定要使用django吗? URL 映射 (Routing): 将 URL 请求映射到 Pyt