python下简单实现select和epoll的socket网络编程

Na今天就简单说说关于python下的socket的select和eopll的接口开发 ~


select模型目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实

上从现在看来,这也是它所剩不多的优点之一,现在其实更多的人用epoll,在

python下epoll文档有点少,epoll也是包含在import select库内的,那就先讲究搞搞select ~

那首先要标注下,文章的原文地址 blog.xiaorui.cc

select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在

Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一

限制。

说点我的理解,要是用烦了多线程的网络编程,可以试试select的模型。

传递给 select 的参数是这么几个列表,分别表示读事件、写事件和错误事件。select 方法返回三个列表,其中包含满足条件的对象(读、写和异常)。


关于服务端的代码:

客户端的代码:

一个完成的select的例子:

这里有队列的概念

关于epoll的方面,大家可以看看这个老外的文档,写不错 ~


select是轮询、epoll是基于事件触发式的,epoll的效率要高于select。

参考的文档地址:http://scotdoyle.com/python-epoll-howto.html

下面是用epoll实现一个服务端 ~



Epoll的最大好处是不会随着FD的数目增长而降低效率,在select中采用轮询处理,每个fd的处理情况,而epoll是维护一个队列,直接看队列是不是空就可以了。


在这里也推荐大家用epoll写服务端的东西,当然我自己理解的不够好,咱们多交流 !!!


对Golang感兴趣的朋友可以加群: 278517979 !!!
另外如果大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码, 感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">