是什么导致select在Python中阻塞?

时间:2009-11-06 17:44:03

标签: python sockets select asynchronous

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

while True:
    print 'loop'
    rlist, wlist, xlist = select.select(readers, [], [], TIMEOUT)
    print 'selected'
    # do stuff

在某一时刻,选择将阻止,并且“选中”永远不会被打印。什么可以导致这种行为?是否有可能出现某种僵局?

UPDATE :我在Ubuntu linux上运行,读者对象是套接字。

2 个答案:

答案 0 :(得分:2)

是的,根据所讨论的操作系统,某个文件描述符确实可能以不可中断的方式在操作系统级别阻止,即使您明确要求它是非阻塞的。根据您的操作系统,这些操作系统级别的错误(或“错误”)可能会有解决方法,但是为了提供任何进一步的帮助,我们需要准确了解操作系统的操作以及{{1中的确切类型的对象列表。

答案 1 :(得分:1)

一些远见......

如果TIMEOUT设置为None,则select将永不超时。 此外,如果读者变为空列表,则select将始终等待完整超时值(如果TIMEOUT为None,则挂起)