在Python中,什么原因可能导致select被阻塞?
这是我在一个循环中使用的一段代码:
while True:
print 'loop'
rlist, wlist, xlist = select.select(readers, [], [], TIMEOUT)
print 'selected'
# do stuff
在某个时刻,select会阻塞,导致“selected”这个变量永远不会被打印出来。这种情况可能是什么原因造成的呢?会不会是出现了某种死锁?
更新:我是在Ubuntu Linux上运行,reader对象是套接字。
2 个回答
1
一些不太可能的情况...
如果TIMEOUT被设置为None,那么select就永远不会超时。还有,如果读者列表变成空的,select就会一直等待到超时的时间(或者如果TIMEOUT是None,就会一直卡住)。
2
是的,这要看你使用的操作系统。有时候,即使你明确要求某个文件描述符是非阻塞的,它在操作系统层面上还是可能会以一种不可中断的方式被阻塞。根据你使用的操作系统,可能会有一些解决这些操作系统层面问题(或者说“缺陷”)的方法。不过,如果想提供进一步的帮助,我们需要知道你具体使用的是哪个操作系统,以及readers
列表里到底是什么类型的对象。