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= 文件句柄
本文来自博客园,作者:元贞,转载请注明原文链接:https://www.cnblogs.com/yuleicoder/articles/7554404.html
浙公网安备 33010602011771号