美文网首页
IO多路复用

IO多路复用

作者: 冬至是条狗 | 来源:发表于2018-12-13 23:39 被阅读0次

select模块

可以不使用while True 解决堵塞IO问题

  • 在Windows上,只支持套接字;在Unix上,可以使用所有文件描述符。

  • poll模型 linux 可用 操作系统可以用,监听的列表比较多,随着列表的增加,效率降低

  • epoll模型 linux可用 监听列表,需要绑定回调函数。效率比较高(selectors模块)

  • 使用select模块实现socket聊天:

import select
import socket


so = socket.socket()
so.bind(("127.0.0.1", 9999))
so.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# so.setblocking(False)
so.listen()

read_list = [so]

# print(rlist)
while True:
    rlist, wlist, xlist = select.select(read_list, [], [])
    for i in rlist:
        if i is so:
           conn, addr = i.accept()
           read_list.append(conn)
        else:  #  elif i is conn:
            ret = i.recv(1024)
            if ret == b"":
                i.close()
                read_list.remove(i)
                continue
            print(ret.decode("UTF-8"))

相关文章

网友评论

      本文标题:IO多路复用

      本文链接:https://www.haomeiwen.com/subject/usuihqtx.html