因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-wsgi,效果还不错。但还是想试试别的,比如传说中超级猛的meinheld什么的。

软硬件环境

硬件:

一台04年初购置的IBM X235服务器,CPU为Xeon 2.4G两颗,内存1G,100M网卡。

软件:

Ubuntu Server 10.04 LTS

Apache 2.2.14

Nginx 0.7.65

Python 2.6.5

web.py 0.37

mako 0.7.2

sqlalchemy 0.7.8

gevent 0.13.7

gunicorn 0.14.6

meinheld 0.4.15

测试代码

有五个版本,分别是:

最基本的WSGI helloworld

defapplication(environ, start_response):

status ='200 OK'

resp ="Hello world!"

resp_headers = [('Content-type','text/plain;charset=utf-8')]

start_response(status, resp_headers)

return[resp]

def application(environ, start_response):

status = '200 OK'

resp = "Hello world!"

resp_headers = [('Content-type','text/plain;charset=utf-8')]

start_response(status, resp_headers)

return [resp]

最基本的web.py your IP

classyourip:

defGET(self):

return"Your IP is : %s"% web.ctx.ip

class yourip:

def GET(self):

return "Your IP is : %s" % web.ctx.ip

加了mako模板的web.py

classonlymako(BaseHandler):

@expose("yourip")

defGET(self):

returndict(yourip=web.ctx.ip)

class onlymako(BaseHandler):

@expose("yourip")

def GET(self):

return dict(yourip=web.ctx.ip)

加了数据库的web.py

classonlydb:

defGET(self):

created = web.ctx.provider.once_access(web.ctx.ip)

return"You have logged : %s"% created

class onlydb:

def GET(self):

created = web.ctx.provider.once_access(web.ctx.ip)

return "You have logged : %s" % created

和同时加了数据库和mako模板的web.py —— 这也是最接近实际应用的情况

classmakodb(BaseHandler):

@expose("index")

defGET(self):

created = web.ctx.provider.once_access(web.ctx.ip)

returndict(created=created)

class makodb(BaseHandler):

@expose("index")

def GET(self):

created = web.ctx.provider.once_access(web.ctx.ip)

return dict(created=created)

测试目标

五种运行环境:

web.py的测试环境app.run

web.py+gevent-WSGI

gunicorn默认(sync)

gunicorn+gevent

gunicorn+meinheld

gunicorn使用 -w 4 参数,经实际比较过,这个参数并不能有效增加rps,但在高并发测试情况下可以在一定程度上减少失败率。

测试方式

ApacheBench 2.3(Ubuntu Desktop 12.04)

RPS测试参数为 -n 200 -c 22 测五次取rps平均值。

之所以用这样比较小的参数,是因为再高了,其中某些测试就通不过了。

测试结果

RPS测试WSGI helloworldWeb.py YourIPWeb.py+MakoWeb.py

+SQLAlchemy

(SQLite)Web.py+Mako

+SQLAlchemy

(SQLite)Web.py

+SQLAlchemy

(Postgresql)Web.py+Mako

+SQLAlchemy

(Postgresql)

Web.py app.run

130

93

75*

45*

59

40

web.py+gevent

422

130

82

54

74

53

gunicorn default

854

439

136

93

66

90

62

gunicorn+gevent

695

291

115

74

56

78

56

gunicorn+meinheld

3565

682

160

84

65

98

64

其中加了“*”的数字发生了数据库错误,仅供参考。

另外,用同样的参数测了一下Apache2处理静态文件的rps为:1780,nginx为:2951。

python web 并发 性能_Python Web Server的性能测试相关推荐

  1. python 模板引擎 对比_Python Web开发模板引擎优缺点总结

    做 Web 开发少不了要与模板引擎打交道.我陆续也接触了 Python 的不少模板引擎,感觉可以总结一下了. 一.首先按照我的熟悉程度列一下: pyTenjin:我在开发 Doodle 和 91 外教 ...

  2. python web flask开发框架_Python Web 开发框架,Flask 与 Django那个更好

    本文把 Flask 和 Django 做一个比对,因为我对这两个 Python Web 框架都有实际的开发经验.希望我可以帮助您选择学习哪个框架,因为学习一个框架可能会非常耗时 -- 当然也很有趣! ...

  3. python3并发性能_python几种并发实现方案的性能比较

    python几种并发实现方案的性能比较 前言 1. 偶然看到Erlang vs. Stackless python: a first benchmark, 对Erlang和 Stackless Pyt ...

  4. python多线程并发写入_Python多线程并发的简单测试

    之前也写了一些简单的Python程序,对于多线程的并发一直没有涉及,今天决定先突破一下,把这个部分的内容先快速的掌握,然后在这个基础上细化改进. 我的好友冰川擅长Python技术,所以就拿来主义,参考 ...

  5. python多进程并发代码_Python并发编程系列之多进程(multiprocessing)

    1引言 本篇博文主要对Python中并发编程中的多进程相关内容展开详细介绍,Python进程主要在multiprocessing模块中,本博文以multiprocessing种Process类为中心, ...

  6. python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型

    原标题:Python 3.9 性能优化:更快的 list().dict() 和 range() 等内置类型 Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本 ...

  7. python为什么不火_python web为什么不火

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 一.搭建环境与项目:平时习惯使用anconda来管理python包, 所以本 ...

  8. python开发小型数据库_python web开发之数据库ORM的 peewee库 动手学习实践笔记

    背景 在web开发的时候,一些比较简单的小型系统其实也得ORM框架,显而易见其实开发速度上是提升很多,因为有必要学习一下对应的ORM库. 关于ORM一些说明 关于ORM(Object Relation ...

  9. python web开发基础_python web开发基本概念

    参考了廖雪峰的Python博客. web请求顺序: 浏览器发送一个http请求 服务器收到请求后,生成一个html文档. 服务器将html文档作为http相应的body发送给浏览器 浏览器收到http ...

最新文章

  1. 服务器维护怎么联系抖音客服,如何联系抖音客服?
  2. jquery文本折叠
  3. 介绍一种导入文件夹中图片数据集的方法
  4. 科大星云诗社动态20210510
  5. nacos 配置中心和注册中心依赖后报错,提示 org.apache.http.impl.client.HttpClientBuilder 这个类找不到
  6. 懒人必备!只需一行代码,就能导入所有的Python库
  7. 盘点:最值得托付终身的星座
  8. 你可能从未听过的 Linux 发行版
  9. 安全也要“易”,谈NAC的硬件化
  10. python filter函数_python基础——filter函数
  11. jfinal中使用freemarker
  12. android4.0自定义锁屏总结【android锁屏研究一】
  13. SQL语法整理(五)-视图
  14. PS一键磨皮插件磨皮DR4.5中文增强版(PS CC 2014-2019),人像修图调色软件
  15. Docker 端口映射到宿主机后, 外网无法通过ip访问对应宿主机端口
  16. sort(()=>{return Math.random()-0.5)}乱序数组不准确
  17. 服务器flv文件播放不了,解决win2003服务器不能播放flv文件格式的问题
  18. mysql1041_mysql8 参考手册--错误代码1036、1041、1046
  19. 拼多多店铺流量解析:这些流量入口你必须了解!
  20. review代码从哪些角度_CodeReview正确的姿势是什么?

热门文章

  1. android触摸进度条,Android仿IOS ViewPager滑动进度条
  2. c语言extern_C语言中#if,#if defined ,#ifdef,extern的用法描述
  3. tomcat7 mysql 连接池_Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置
  4. Visualization的学习笔记
  5. 手机端网页开发的两个重要设置
  6. Python3.x Numpy中的array数组_矩阵操作
  7. 常用的Opencv函数汇总(持续更新...)
  8. 模版 ----- 整数二分
  9. 无setup.exe情况下安装mysql5.7.28(win10)
  10. Java IO实战操作(二)