select函数原型:
select.select(rlist, wlist, xlist[, timeout])
本函数用于确定一个或多个套接口的状态。对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息。
select是一个直接调用unix中select()的简单接口。前三个参数都是‘等待对象’的序列:整型的文件描述符或者是一个无参数方法fileno()返回的整数:
rlist: 等待直到准备好读
wlist: 等待直到准备好写
xlist: 等待一种意外的情况 (在手册中查看你的系统中认为的那种情况)
rlist参数标识等待可读性检查的套接口。如果该套接口正处于监听listen()状态,则若有连接请求到达,该套接口便被标识为可读,这样一个accept()调用保证可以无阻塞完成。对其他套接口而言,可读性意味着有排队数据供读取。或者对于SOCK_STREAM类型套接口来说,相对于该套接口的虚套接口已关闭,于是recv()或recvfrom()操作均能无阻塞完成。
wlist参数标识等待可写性检查的套接口。如果一个套接口正在connect()连接(非阻塞),可写性意味着连接顺利建立。如果套接口并未处于connect()调用中,可写性意味着send()和sendto()调用将无阻塞完成。
xlist参数标识等待带外数据存在性或意味错误条件检查的套接口。请注意如果设置了SO_OOBINLINE选项为假FALSE,则只能用这种方法来检查带外数据的存在与否。对于SO_STREAM类型套接口,远端造成的连接中止和KEEPALIVE错误都将被作为意味出错。
空序列也是允许的,但是能不能3个参数都为空就要由你的系统决定了。(众所都知unix下是行得,windows下不行)timeout指定了一个秒级的浮点型参数表示超时时间当timeout参数为空的时候省略了函数会阻塞直到至少有一个文件描述符已经准备好了。
返回值是三个已经准备好的列表,也是3个参数对象的子集。如果超时了,返回的是三个空列表。其中列表中可以接收的参数类型是Python中的文件参数(例如sys.stdin或者是open()、sys.popen()的返回对象),或者是 socket.socket的返回对象。你也可以自己封装成一个类,只要适合fileno()方法。
注意:在windows中文件对象是无法接受的,但是socket是可以使用的。