IO模型
非阻塞
import socket sk = socket.socket() sk.bind(('',8080)) sk.setblocking(False) sk.listen() conn_l = [] del_l = [] while True: try: conn,addr = sk.accept() print('建立连接:',addr) conn_l.append(conn) except BlockingIOError: for conn in conn_l: try: msg = conn.recv(1024).decode('utf-8') if msg == '': del_l.append(conn) continue print(msg) conn.send(b'bye bye') except BlockingIOError: pass for conn in del_l: conn.close() conn_l.remove(conn) del_l.clear() sk.close()
import socket,time import threading def func(): sk = socket.socket() sk.connect(('127.0.0.1',8080)) sk.send(b'hello') time.sleep(1) print(sk.recv(1024).decode('utf-8')) sk.close() for i in range(20): threading.Thread(target=func).start()
import socket import select sk = socket.socket() sk.bind(('',8080)) sk.setblocking(False) sk.listen() 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: msg = i.recv(1024).decode('utf-8') if msg == '': i.close() read_lst.remove(i) continue print(msg) i.send(b'goodbye')
import socket,time import threading def func(): sk = socket.socket() sk.connect(('127.0.0.1',8080)) sk.send(b'hello') print(sk.recv(1024).decode('utf-8')) sk.close() for i in range(20): threading.Thread(target=func).start()