1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 利用IO多路复用 使用linux下的EpollSelector实现并发服务器

利用IO多路复用 使用linux下的EpollSelector实现并发服务器

时间:2018-11-22 09:24:29

相关推荐

利用IO多路复用 使用linux下的EpollSelector实现并发服务器

1 import socket 2 import selectors # IO多路复用选择器的模块 3 4 # 实例化一个和epoll通信的选择器 5 epoll_selector = selectors.EpollSelector() # 如果是非linux系统: .DefaultSelector() 6 server = socket.socket() 7 server.bind(('', 9980)) 8 server.listen(1000) 9 10 def recv(conn):11'''接收数据'''12recv_data = conn.recv(1024)13if recv_data:14 print(recv_data.decode())15 conn.send(recv_data)16else:17 epoll_selector.unregister(conn) # 关闭epoll监控18 conn.close()19 20 def accept(server1):21'''建立连接'''22conn, addr = server1.accept()23epoll_selector.register(conn, selectors.EVENT_READ, recv)24 25 # 注册事件26 epoll_selector.register(server, selectors.EVENT_READ, accept)27 28 while True:29'''显示查询的好的事件'''30events = epoll_selector.select()31# print(events)32'''33[(SelectorKey(fileobj=<socket.socket fd=4, 34 family=AddressFamily.AF_INET, 35 type=SocketKind.SOCK_STREAM, 36 proto=0, 37 laddr=('0.0.0.0', 9989)>, 38 fd=4, 39 events=1, 40 data=<function accept at 0xb71dc92c>), # 一个函数地址 41 42 43 1)]44列表里面两个元素,一个是函数SelectorKey(),45括号里面是一个套接字fileobj,一个fd,一个events,一个data46'''47for key, mask in events:48 callable = key.data# 取出回调函数49 sock = key.fileobj # 取出套接字50 callable(sock)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。