python select模块_Python/selectors模块

Python/selectors模块

selectors模块是可以实现IO多路复用机制:

它具有根据平台选出最佳的IO多路机制,比如在win的系统上他默认的是select模式而在linux上它默认的epoll。

常用共分为三种:

select、poll、epoll

select的缺点:

1、每次调用都要将所有的文件描述符(fd)拷贝的内核空间,导致效率下降

2、遍历所有的文件描述符(fd)查看是否有数据访问

3、最大链接数限额(1024)

poll:

它就是select和epoll的过渡阶段,它没有最大链接数的限额

epoll:

1、第一个函数是创建一个epoll句柄,将所有的描述符(fd)拷贝到内核空间,但只拷贝一次。

2、回调函数,某一个函数或某一个动作成功完成之后会触发的函数为所有的描述符(fd)绑定一个回调函数,一旦有数据访问就是触发该回调函数,回调函数将(fd)放到链表中

3、函数判断链表是否为空

4、最大启动项没有限额

selsect实例:

1 服务端2 import selectors #基于select模块实现的IO多路复用,建议大家使用

3 importsocket4 sock=socket.socket()5 sock.bind((‘127.0.0.1‘,8800))6 sock.listen(5)7 sock.setblocking(False)8 sel=selectors.DefaultSelector() #根据平台选择最佳的IO多路机制,比如linux就会选择epoll

9

10 defread(conn,mask):11 try:12 data=conn.recv(1024)13 print(data.decode(‘utf8‘))14 data2=input(‘>>>>‘)15 conn.send(data2.encode(‘utf8‘))16 exceptException:17 sel.unregister(conn)18

19 defaccept(sock,mask):20 conn,addr=sock.accept()21 print(‘-------‘,conn)22 sel.register(conn,selectors.EVENT_READ,read)23 sel.register(sock, selectors.EVENT_READ, accept) #注册功能

24 whileTrue:25 print(‘wating....‘)26 events=sel.select() #[(sock),(),()] 监听

27

28 for key,mask inevents:29 #print(key.data) #accept 找出有活动的绑定函数

30 #print(key.fileobj) #sock 找出有活动的文件描述符

31

32 func=key.data33 obj=key.fileobj34

35 func(obj,mask) #1 accept(sock,mask) 2read(conn,mask)

36 ------------------------------------------------------------------------------

37 客户端38 importsocket39 tin=socket.socket()40 tin.connect((‘127.0.0.1‘,8800))41 whileTrue:42 inp=input(‘>>>>‘)43 tin.send(inp.encode(‘utf8‘))44 data=tin.recv(1024)45 print(data.decode(‘utf8‘))

原文:http://www.cnblogs.com/guobaoyuan/p/6841904.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值