Python IO多路复用
程序员文章站
2023-04-02 11:40:07
IO多路复用 多个socket是否已经发生变化,(是否已经连接成功/是否已经获得数据)(可读/可写) 实现: 1. IO多路复用 2. 非阻塞 代码如下: ......
io多路复用
多个socket是否已经发生变化,(是否已经连接成功/是否已经获得数据)(可读/可写)
实现:
- io多路复用
- 非阻塞
代码如下:
import socket import select client1 = socket.socket() client1.setblocking(false) # 将原本链接阻塞,修改为非阻塞 # 百度创建链接,阻塞 try: client1.connect(('www.baidu.com',80)) except blockingioerror: pass client2 = socket.socket() client2.setblocking(false) # 将原本链接阻塞,修改为不阻塞 # 百度创建链接,阻塞 try: client2.connect(('www.sogou.com',80)) except blockingioerror: pass client3 = socket.socket() client3.setblocking(false) # 将原本链接阻塞,修改为不阻塞 # 百度创建链接,阻塞 try: client3.connect(('www.oldboyedu.com',80)) except blockingioerror: pass socket_list = [client1,client2,client3] conn_list = [client1,client2,client3] while true: rlist,wlist,elist = select.select(socket_list,conn_list,[],0.005) for sk in wlist: if sk == client1: sk.sendall(b'get /s?wd=alex http/1.0\r\nhost:www.baidu.com\r\n\r\n') elif sk == client2: sk.sendall(b'get /web?query=alex http/1.0\r\nhost:www.sogou.com\r\n\r\n') else: sk.sendall(b'get /s?wd=alex http/1.0\r\nhost:www.oldboyedu.com\r\n\r\n') conn_list.remove(sk) for sk in rlist: chunk_list = [] while true: try: chunk = sk.recv(8096) if not chunk: break chunk_list.append(chunk) except blockingioerror: break boby = b''.join(chunk_list) print('------->',boby) sk.close() socket_list.remove(sk) if not socket_list: break
上一篇: 华为鸿蒙系统何时能用到手机上?任正非:短时间做不到
下一篇: 关于ajax