Python3中IO多路复用

5天前

Python3中IO多路复用

selectors 模块建立在 选择 select 基础之上,它是在 python3.4 版本中引进的,它封装了IO多路复用中的 selectepoll 能够更快,更方便的实现高并发效果。

  1. import socket
  2. import selectors
  3. selector = selectors.DefaultSelector()
  4. server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
  5. server.bind(('0.0.0.0', 1024))
  6. # 设置为非阻塞
  7. server.setblocking(False)
  8. server.listen()
  9. # 注册到selector,监听读事件
  10. selector.register(server, selectors.EVENT_READ)
  11. # 处理连接事件
  12. def accept(key,event):
  13. connection,address = key.fileobj.accept()
  14. # 设置为非阻塞模式
  15. connection.setblocking(False)
  16. # 注册读事件
  17. selector.register(connection, selectors.EVENT_READ)
  18. # 处理读取事件
  19. def readable(key,event):
  20. connection = key.fileobj
  21. data = connection.recv(1024) # 读取数据
  22. if data:
  23. print('收到数据:%s'%(data.decode('UTF_8')))
  24. else:
  25. selector.unregister(connection) # 连接关闭,移除注册
  26. connection.close()
  27. while True:
  28. # 开始轮询
  29. results = selector.select()
  30. for key , event in results:
  31. if key.fileobj == server:
  32. accept(key,event)
  33. else:
  34. readable(key,event)

跟Java的nio差不多一个德行,但是感觉它相对简单点儿。


0
0
0

添加评论

正在回复:
取消
0
0
0
0