python之selectors模块


  selectors模块是在python3.4版本中引进的,它封装了IO多路复用中的select和epoll,能够更快,更方便的实现多并发效果。

  官方文档见:https://docs.python.org/3/library/selectors.html

  以下是一个selectors模块的代码示范:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python
#Author:sean
 
import  selectors
import  socket
#selectors模块默认会用epoll,如果你的系统中没有epoll(比如windows)则会自动使用select
sel  =  selectors.DefaultSelector()    #生成一个select对象
 
def  accept(sock, mask):
     conn, addr  =  sock.accept()   # Should be ready
     print ( 'accepted' , conn,  'from' , addr)
     conn.setblocking( False #设定非阻塞
     sel.register(conn, selectors.EVENT_READ, read)   #新连接注册read回调函数
 
def  read(conn, mask):
     data  =  conn.recv( 1024 )   # Should be ready
     if  data:
         print ( 'echoing' repr (data),  'to' , conn)
         conn.send(data)
     else :
         print ( 'closing' , conn)
         sel.unregister(conn)
         conn.close()
 
sock  =  socket.socket()
sock.bind(( 'localhost' 8080 ))
sock.listen()
sock.setblocking( False )
sel.register(sock, selectors.EVENT_READ, accept)     #把刚生成的sock连接对象注册到select连接列表中,并交给accept函数处理
 
while  True :
     events  =  sel.select()    #默认是阻塞,有活动连接就返回活动的连接列表
     #这里看起来是select,其实有可能会使用epoll,如果你的系统支持epoll,那么默认就是epoll
     for  key, mask  in  events:
         callback  =  key.data      #去调accept函数
         callback(key.fileobj, mask)  #key.fileobj就是readable中的一个socket连接对象









本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1895725,如需转载请自行联系原作者
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值