Part-10

selector模块

example codes

 1 import selectors
 2 import socket
 3 
 4 sel = selectors.DefaultSelector()
 5 
 6 
 7 def accept(sock, mask):
 8     conn, addr = sock.accept()  # Should be ready
 9     print('accepted', conn, 'from', addr,mask)
10     conn.setblocking(False)
11     sel.register(conn, selectors.EVENT_READ, read) #新连接注册read回调函数
12 
13 
14 def read(conn, mask):
15     data = conn.recv(1024)  # Should be ready
16     if data:
17         print('echoing', repr(data), 'to', conn)
18         conn.send(data)  # Hope it won't block
19     else:
20         print('closing', conn)
21         sel.unregister(conn)
22         conn.close()
23 sock = socket.socket()
24 sock.bind(('localhost', 9998))
25 sock.listen(100)
26 sock.setblocking(False)
27 sel.register(sock, selectors.EVENT_READ, accept)
28 
29 while True:
30     events = sel.select() #默认阻塞,有活动连接就返回活动的连接列表
31     for key, mask in events:
32         callback = key.data #accept
33         callback(key.fileobj, mask) #key.fileobj=  文件句柄
View Code

 

posted @ 2017-09-19 21:40  元贞  阅读(94)  评论(0)    收藏  举报