前几个月,因为教研室师兄的大力推荐,大家跟着学习了下twisted,我也简单的学习了下reactor,factory,deferred等基本的twisted的应用模式,后来因为教研室其他事情比较多,就没怎么继续深入了,最近被派到北京,因为项目需求,又重拾twisted,再次学习中,发现twisted的强大。
今天下午学着试了下,epollreactor,以前都是在c/c++下用epoll,这次试验下python下实现epollreactor,还是最基本的回射服务器,本以为很轻松的搞定,没想到一些小细节啊,老是出错,后来咨询啦下老郭同志,俺们的大师兄,后面总算找到问题,记录下来,以免再犯,哈哈。
1. reactor全局一般是一个,所以factory出错处理的时候,最好是不要用reactor.stop(),不然就会报错了,"Can't stop reactor that isn't running",关了唯一的一个,后面出错的时候再去关,当然就会出错了。我个人处理的时候就简单的把这个连接关闭了,然后打印出错。
![](http://www.cublog.cn/images/face/007.gif)
2. 两边都是要epollreactor.install(),第一次的时候,就是忘记在客户端弄这个了(对了,别忘记了ulimit设置fd哦),导致一直卡在1020这个数目上,啧啧。
好了,一切完成,现在在epollreactor的模式下测试下6000个连接,用nmon分析下:
CPU: |
User% |
Sys% |
Wait% |
Idle% |
CPU% |
Avg |
1.2 |
4.4 |
0.0 |
94.4 |
5.6 |
Max |
23.5 |
90.0 |
0.0 |
100.0 |
100.0 |
Max:Avg |
19.8 |
20.3 |
0.0 |
1.1 |
17.8 |
nmon -f(保存到文件) -s(打印间隔时间) -c(打印次数)
阅读(2032) | 评论(0) | 转发(0) |