本文主要是介绍Python网络编程之带select的异步IO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
与之前的socket方式不同,select通过轮流询问的方式监听(读取)客户端
select也存在阻塞,会等待到三个描述符至少一个准备就绪.
select函数参数为三个列表 分别为 r_list,w_list,e_list分别代表输入,输出,异常列表
返回参数也是这三个列表
实现方式如下
import select
import sockets=socket.socket()
host=socket.gethostname()
port=1234
s.bind((host,port))
s.listen(5)
inputs=[s,]
outputs=[]while True:r_list,w_list,e_list=select.select(inputs,outputs,inputs,1)for i in r_list:if i is s:c,addr=s.accept()inputs.append(c)print(str(addr)+"has been connected")else:try:date=i.recv(1024)print(str(i.getpeername))print(date.decode())outputs.appned(i)except Exception as ex:#inputs.remove(i)passfor t in w_list:outputs.remove(t)for g in e_list:inputs.remove(g)
对上述程序进行解释:
前几排就是进行一些常规的网络配置
死循环中select带入列表并设置超时为1s
先遍历r_list如果是自身套接字则创建新的连接,并将新的连接
如果是inputs列表中的其他套接字则表示有数据传输过来,获取数据并打印
e_list中的都是有异常的套接字,视为断开连接,删除掉
值得注意的是:当客户端停止发送,程序会进行异常捕捉并视为断开连接,这里我pass掉以多次接受数据
这篇关于Python网络编程之带select的异步IO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!