web.py性能测试

原创 2011年07月22日 22:12:36
一直从事后台系统的开发工作,对web、甚至前端技术一无所知;为了响应leader提出的多面手号召,决定一探前端技术。由于个人对python是情有独钟,毅然决定从python web开发下手。在众多的python web框架中,我看上了简单、轻量的web.py,没有特别喜欢的原因,就是简单,下手成本较低,哈哈。不过自己对轻量级的东西都比较乐意接受,比如nginx。本文不会介绍web.py的开发、不会介绍环境部署,这些东西官网都有相当详细的介绍,或者网上一堆一堆的文档。平时自己在调研新技术的顺序基本是:文档详细否、性能如何、稳定性能不能生产、功能是否满足需求等。所以本文只是记录自己对web.py框架和搭配nginx做的一个benchmark。


测试例子

#!/bin/env /usr/local/bin/python

import web 

web.config.debug = False

urls = ('/(.*)', 'hello')
app = web.application(urls, globals())

class hello:    
    def GET(self, name):
        if not name: 
            name = 'World'
            return 'Hello, ' + name + '! fuck the hello'

if __name__ == "__main__":
    app.run()

ps:貌似是从官网直接copy的demo,自己猥琐的修改了一下。


测试工具
apache自带的著名ab,虽然我认为它不怎么样,至少感觉没它名声那么好。测试参数如下:

ab -n 10000 -c 100 http://127.0.0.1:1988/  


web.py性能

直接利用web.py内置的web server来启动这个hello word服务,启动时将标准输出和标准错误重定向到/dev/null以此减少IO的消耗。benchmark如下图:



web.py程序默认启动虽然是多线程的(这个在/proc/pid里面是可以看到的),但由于python多线程实现上的锁问题,在并发上面一直没有显著的效果,所以这里的benchmark有点惨不忍睹,至少让研究高并发服务器的会很不满意。16核的cpu放在那里一动不动的,好可惜啊。


nginx + spawn-fcgi + flup + web.py性能

这里nginx没有做任何调优,基本属于默认配置,除了加入fastcgi相关指令外。web.py是利用spawn-fcgi启动了32个进程,其实和16个进程没有多大的区别。测试主机是8核、超线程到了16核;内存对本次测试不会构造影响。benchmark如下图:


ps:采用这个的一个架构,性能有了明显的提升了,qps是单web.py的8倍。性能的提升主要就是在python的多进程复用了多核cpu。16个核都跑到了70%-80%,基本属于跑满了;load也达到了50-60了。24G内存的测试主机,内存不是瓶颈。这个结果的优化空间应该也不会太大了,毕竟cpu几乎跑满了负载也上来了,cpu终究成为了瓶颈。


总结一点

高性能服务器的设计可以采用多线程或多进程,最大的复用cpu。cpu就放在那里,不用白不用。


错误小记

利用spawn-fcgi启动web.py的测试程序时,总是抛出如下错误, 最后发现居然是-f 选项指定的文件没有采用绝对路径,spawn-fcgi的用户体验太低了。

spawn-fcgi: child exited with: 127

Spawn-FCGI安装

Spawn-FCGI安装获取spawn-fcgi编译安装包, 在 http://redmine.lighttpd.net/projects/spawn-fcgi/wiki 上可 以获取当 前最新的版...
  • Bingo_Zq
  • Bingo_Zq
  • 2016-09-06 20:10:28
  • 2230

高并发异步uwsgi+web.py+gevent

高并发异步uwsgi+web.py+gevent 为什么用web.py? python的web框架有很多,比如webpy、flask、bottle等,但是为什么我们选了webpy呢...
  • linuxheik
  • linuxheik
  • 2016-07-27 10:50:28
  • 1682

python web py入门-1-web.py简介和安装

背景         记录python web.py开发入门学习的过程,主要想通过这个入门,然后继续去学习python Django框架开发课程。目前我的个人技能状态是,稍微懂点selenium we...
  • u011541946
  • u011541946
  • 2017-09-04 22:29:28
  • 4915

spawn-fcgi

在运行spawn-fcgi时出现错误: spawn-fcgi: child exited with: 0 -f 使用绝对路径!!!!  /usr/local/bin/spawn-fcgi -...
  • liu0808
  • liu0808
  • 2018-01-02 19:01:28
  • 80

nginx+spawn-fcgi+demo+fcgi库函数

由于项目中用到了nginx+FastCGI相关内容,所以这段时间学习了一下,顺便记下相关内容。我是在远程工作机上实验的,有个缺点就是没有root权限,所以有些步骤我就没做了,比如make instal...
  • yockie
  • yockie
  • 2016-08-03 22:04:53
  • 3165

使用web.py创建一个blog

原文:http://www.360doc.com/content/10/1227/19/11586_81814574.shtml 注:本文针对web.py 0.23版,以及python 2.5.1; ...
  • yavobo
  • yavobo
  • 2011-03-14 09:45:00
  • 4469

web.py的使用

web.py是一个非常轻量级的python web framework。 使用非常简单。 1. 安装web.py:http://webpy.org/install.zh-cn 2. 最简单的he...
  • totogogo
  • totogogo
  • 2012-09-03 18:49:26
  • 2866

修改编译spawn-fcgi

取消spawn-fcgi: I will not set uid to 0的限制。
  • sheismylife
  • sheismylife
  • 2013-08-01 11:13:40
  • 2930

nginx python spawn-fcgi Flup webpy搭建python的web环境

在以前的很多文章中,都见到直接利用nginx的代理直接进行负载均衡的做法(在我的上一文章中有讲到),其实这样做有一个缺陷,就是在nginx范围需要开多个端口进行挂载,且没有统一的启动命令,思来想去还是...
  • wzm112
  • wzm112
  • 2012-08-30 03:09:09
  • 2673

web.py模板之def with

一:模板的理解模板是将一个事物的结构规律予以固定化、标准化的成果。例如:网页的组成需要是html,head,body,你只要按照它的规则来写,里面具体是怎么执行的,你需要去了解其他知识。web.py:...
  • guofeng93
  • guofeng93
  • 2017-01-05 12:32:01
  • 1274
收藏助手
不良信息举报
您举报文章:web.py性能测试
举报原因:
原因补充:

(最多只允许输入30个字)