python select

select作用:
1.监听哪些文件描述符(最多监听1024个fd)的哪些事件
(每次调用select,都会会所有的socket进行一次线性扫描)
2.内核监听到数据后,不告诉是哪个连接有数据,用户只能通过轮询的方式来获取数据
(如:监视10个socket,当有1个连接有数据后,内核就通知用户10个socket中有数据了)

select过程:
1.将fd从用户空间复制到内核空间
2.遍历所有fd,查看对应事件是否发生
3.发生:将唤醒,未发生将阻塞
4.返回遍历后的fd
5.将fd从内核空间赋值到用户空间

fd_r_list, fd_w_list, fd_e_list = select.select(rlist, wlist, xlist, [timeout])
参数描述
rlist满足可读条件,获取发生变化的fd,并添加到fd_r_list
wlist
xlist满足发生错误时,将发生错误的fd添加到fd_e_list
timeout为空,select会一直阻塞,直到监听的fd发生变化.如果设置为n,则过n秒,且没有检测到变化,则返回三个空列表

服务端

import socket
import select

server1 = socket.socket()
server1.bind(('0.0.0.0', 8001))
server1.listen()

server2 = socket.socket()
server2.bind(('0.0.0.0', 8002))
server2.listen()

inputs = [server1, server2, ]

while True:
    r_list, w_list, e_list = select.select(inputs,[],[],1)
    print(f'r_list:{r_list}')
    for ser in r_list:
        conn, address = ser.accept()
        conn.send('您好'.encode())
        conn.close()

客户端

import socket

client = socket.socket()
client.connect(('127.0.0.1', 8001))
print(client.recv(1024).decode())

参考:
https://www.jb51.net/article/111899.htm
https://www.jianshu.com/p/e26594304e11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值