初学epollreactor
时间:2008-09-26 来源:mhz-ada
前几个月,因为教研室师兄的大力推荐,大家跟着学习了下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",关了唯一的一个,后面出错的时候再去关,当然就会出错了。我个人处理的时候就简单的把这个连接关闭了,然后打印出错。
2. 两边都是要epollreactor.install(),第一次的时候,就是忘记在客户端弄这个了(对了,别忘记了ulimit设置fd哦),导致一直卡在1020这个数目上,啧啧。
好了,一切完成,现在在epollreactor的模式下测试下6000个连接,用nmon分析下:
500)this.width=500;" border="0"> nmon -f(保存到文件) -s(打印间隔时间) -c(打印次数)
今天下午学着试了下,epollreactor,以前都是在c/c++下用epoll,这次试验下python下实现epollreactor,还是最基本的回射服务器,本以为很轻松的搞定,没想到一些小细节啊,老是出错,后来咨询啦下老郭同志,俺们的大师兄,后面总算找到问题,记录下来,以免再犯,哈哈。
1. reactor全局一般是一个,所以factory出错处理的时候,最好是不要用reactor.stop(),不然就会报错了,"Can't stop reactor that isn't running",关了唯一的一个,后面出错的时候再去关,当然就会出错了。我个人处理的时候就简单的把这个连接关闭了,然后打印出错。
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 |
500)this.width=500;" border="0"> nmon -f(保存到文件) -s(打印间隔时间) -c(打印次数)
相关阅读 更多 +