IO模型:多路复用IO模型与异步IO模型

IO多路复用

使用python内置模块select实现socket IO多路复用:

  • Server
import socket
import select

sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.setblocking(False)
sk.listen(5)

read_lst = [sk]

while True:
    r_lst,w_lst,x_lst = select.select(read_lst,[],[])
    for i in r_lst:
        if i is sk:
            conn,addr = i.accept()
            read_lst.append(conn)
        else:
            ret = i.recv(1024)
            if ret == b'':
                i.close()
                read_lst.remove(i)
                continue
            print(ret)
            i.send(b'goodbye!')
  • Client
import socket
import time
from threading import Thread

def func():
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    sk.send(b'hello')
    time.sleep(3)
    print(sk.recv(1024))


if __name__ == '__main__':
    for i in range(20):
        t = Thread(target=func)
        t.start()

猜你喜欢

转载自www.cnblogs.com/wualin/p/9968433.html