在Python中,什么原因可能导致select被阻塞?

0 投票
2 回答
640 浏览
提问于 2025-04-15 15:45

这是我在一个循环中使用的一段代码:

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列表里到底是什么类型的对象。

撰写回答