day10——IO多路复用

这是底层包装了一个for循环

同时相同功能的还有poll  epoll,学习socket是因为它可以跨平台,但是效率不高

#coding=utf-8
import select
import socket
ip_addr=("127.0.0.1",9556)
s=socket.socket
s.blind(ip_addr)
s.listen(5)
inputs=[]
outputs=[]
message={}
while True:
    r,w,s=select.select([s,],outputs,[],1)
    print(len(inputs),len(r),len(w),len(outputs))#打印长度
    for list_num in r:
        if list_num==s:
            print(list_num)
            conn,address=list_num.accept()
            inputs.append(list_num)
            message[list_num]=[]#生命列表
            conn.sendall(bytes("Hello",encoding="utf-8"))
        else:
            try:
                ret=list_num.recv(1024)
                if not ret:
                    raise  Exception("断开链接")#剖出异常
                else:
                    outputs.append(list_num)#添加到需要回复的列表
                    message[list_num].append(ret)#将消息做成字典
            except:
                inputs.remove(list_num)
                del message[list_num]
    for w_k in w:#循环接收到消息的类表
        w_k.sendall(bytes("Reponse",encoding="utf-8"))
        outputs.remove(w_k)#回复完毕后删除对象




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值