IO多路复用之Selectors

 1 import selectors,socket
 2 
 3 sel = selectors.DefaultSelector()
 4 
 5 def accept(sock,mask):
 6     conn,addr = sock.accept()
 7     print('accepted:',conn,'from',addr)
 8     conn.setblocking(0)
 9     sel.register(conn,selectors.EVENT_READ,read)
10 
11 def read(conn,mask):
12     data = conn.recv(1024)
13     if data:
14         print(data.decode('utf8'))
15         conn.send(data)
16     else:
17         print('closing',conn)
18         sel.unregister(conn)
19         conn.close()
20 
21 sock = socket.socket()
22 sock.bind(('127.0.0.1',8000))
23 sock.listen(100)
24 sock.setblocking(0)
25 sel.register(sock,selectors.EVENT_READ,accept)
26 
27 while True:
28     events = sel.select() #默认阻塞,已有数据就返回连接列表
29     for key,mask in events:
30         callback = key.data #accept
31         callback(key.fileobj,mask) #key.fileobj = socket

猜你喜欢

转载自www.cnblogs.com/fly10086/p/12371827.html