Python IO多路复用
程序员文章站
2022-05-25 10:29:38
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
下一篇: Python3 系列之 并行编程
推荐阅读
-
python try except 捕获所有异常的实例
-
opencv_python图像处理——HOG特征描述算子-行人检测
-
使用Python实现在Windows下安装Django
-
解决pyinstaller在单一文件时无法正确添加权限清单问题,(UAC,uac_admin,manifest,asInvoker,python,requireAdministrator)
-
python基础教程:dir()和__dict__属性的区别
-
Python中浅拷贝和深拷贝的理解与研究
-
Python处理Excel数据
-
Python开发--进程、线程、协程详解
-
python算法(冒泡排序法)
-
python uuid模块使用实例