python-IO多路复用,select模块

Posted benchdog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-IO多路复用,select模块相关的知识,希望对你有一定的参考价值。

触发机制:1)水平触发;2)边缘触发

IO多路复用单线程实现并发,实现模块:1)select(效率最低); 2)poll;3)epoll(最好,nginx的实现)。linux下有这3种模块,windows下只有select模块

IO多路复用的好处:同时可以监听多个连接

IO多路复用的select模块触发机制:水平触发

PS:异步:整个过程中,不能有一丝的阻塞

client端:

import socket

sk = socket.socket()
sk.connect((127.0.0.1, 8801))

while True:
    inp = input(">>>>")
    sk.sendall(bytes(inp, "utf8"))
    data = sk.recv(1024)
    print(str(data, utf8))

server端:

import socket
import select
sk=socket.socket()
sk.bind(("127.0.0.1",8801))
sk.listen(5)
inputs=[sk,]
while True:
    r,w,e=select.select(inputs,[],[],5)

    for obj in r:#[sk,]
        if obj==sk:
            conn,add=obj.accept()
            print(conn)
            inputs.append(conn)
        else:
            data_byte=obj.recv(1024)
            print(str(data_byte,utf8))
            inp=input(回答%s号客户>>>%inputs.index(obj))
            obj.sendall(bytes(inp,utf8))

    print(>>,r)

 

以上是关于python-IO多路复用,select模块的主要内容,如果未能解决你的问题,请参考以下文章

Python-IO多路复用

python-IO多路复用之epoll

Python IO多路复用select模块

select模块select IO多路复用和select实现FTP

Python——IO多路复用之select模块epoll方法

select实现IO多路复用服务器