以前只用过python做爬虫,处理文本数据什么的,今天看了simplecd的源码觉得做小网站也挺方便的。
所以用webpy,是因为很简单好理解,看了一遍官方手册基本上就能用。
准备在笔记本上搭个web环境,ab测了一下webpy自带的wsgi服务器(CherryPyWSGIServer)性能很差,每秒也就处理十几二几个请求。
想看看用fastcgi会不会快一点,因为用的是T60 XP,就下了官方的ngnix for windows 0.7.56。
ab压了一下,静态文件每秒可以稳定到500左右。ngnix在windows下只能用select,查到一个iocp写的模块,不过我不知道怎么编译,实际上native windows版本的源码在哪里我都没找到。
开发用,我想有个200/s也许可以了。
webby的cookbook里介绍的方式要用到Spawn-fcgi,可是windows版本在哪?
找到了非官方编译的lighttpd,但是里面Spawn-fcgi并没有单独出来。
大家知道在windows下不支持socket.fromfd,flup官方也是不支持的,官方给出了两个patch和网上流传的一样就是注释掉或者autodect然后转到cgi模式。
借鉴了一下Django的官方资料,发现python windows版本socket.fromfd的处理必须patch一下python windows的源代码重新编译。或者使用pypi上的其他实现替代flup,我看了一下那个是05年的,没什么兴趣。
最后用的方法很简单,就是加一句
web.wsgi.runwsgi = lambda func : web.wsgi.runfcgi(func, addr=('localhost', 8000))
然后在ngnix里配fastcgi_pass 127.0.0.1:8000 就可以了。
结果用ab压了一下,仍然十分不理想,每秒也只能到60-70/s。测试时我观察了下,ngnix连接数保持在500,python连接数保持在250。但是ab最后的统计只有这么多.
还有ab -c 到了200以后,flup就会有时出现100053错误。
或是有几十个连接卡在ab和nignx之间停在那里,而flup已经处理完了,造成ab测试完不成。
不过web服务一直都没有冲死,即使flup报错之后也还能用。
如果nginx加上fastcgi_cache是可以并发500的,因为都是nignx在处理,这样的话好像还能用。
每次ab压过后会留下大量的TIME_WAIT连接,改了注册表稍微好一点,多数的时候要等着释放,要不马上重新ab压的时候会报错。
因为cpu是双核,我试了一下worker_processes 2,结果有问题,似乎完全不能转发到flup了。
指定分配进程到某个cpu的那个配置项在这个版本是不支持的。
不知道nginx+wsgi或是+scgi方式效果是什么样的,可惜都得编译,要是用cywin那我还不如装个linux。
iis5.1+fastcgi这是微软提供的,下一步想试一下。不过意义不大,因为部署环境还是要用*unix的。
不知道哪位有过相似经验的能指教下啊?