python select模块.select实现非阻塞socket,Popen等(特别在 Unix 下,它还可以用于管道)
link: http://blog.sina.com.cn/s/blog_76a0e17a0100q762.html
select — Waiting for I/O completion
接受的对象类型按次序是 Python 文件对象(例如:sys.stdin 或者 open()或os.popen()返回的对象)或者socket.socket()返回的socket对象。你也可以定义一个类,只要它包含恰当的 fileno() 方法(它其实范围文件描述符,不要只是返回随机数)注意:windows 不接受文件对象,但是接受 sockets。在 windows 下 select() 程序隐式使用 WinSock 库,WinSock 并不支持文件对象句柄。
select.select(rlist, wlist, xlist[, timeout])
> 平台依赖性:
?Windows只支持socket作为fd,不支持文件的fd
?Linux 和Unix平台都支持
> 输入的文件描述符号可以为如下几种情况:
python file objects:?
??????????????1. sys.stdin??
??????????????2. open()???或者 os.popen()
??????????????3. socket.socket()
??????????????4. 其他可以调用fileno()的对象返回的文件描述符号(这个是真实的 fd,不仅仅是一个随机整数)
> 前三个参数是 ‘waitable objects’的序列,要么是整数代表的fd,或者是由fileno()返回的对象才能作为三个序列的元素
rlist: wait until ready for reading
wlist: wait until ready for writing
xlist: wait for an “exceptional condition” (see the manual page for what your system considers such a condition)
三个参数是否全为空是平台相关的,Unix系统是可以全为空的,Windows不能全为空.
Unix全为空的话,可以作为定时器用了。
> timeout 参数
timeout参数是浮点数代表的参数,单位是seconds
timeout参数省略(默认为None),则代表永远block直到有一个fd准备好。
timeout = 0, 代表不会block,或者(specifies a poll)
> return 参数
返回值为三个list,包含三个已经准备好的fd列表(不会超过输入三个参数)。
当timeout后还没有fd准备好,则返回三个空列表([],[],[])
python 的 List Comprehensions语法:
这个语法的目的是用于创建列表,其他相似的语法还有(map,filter, zip 和 lambda)