美文网首页
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