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
IO多路复用之Selectors
猜你喜欢
转载自www.cnblogs.com/fly10086/p/12371827.html
今日推荐
周排行