2009-11-06 32 views
0

下面是一個代碼片段,我用一個循環:什麼可以導致選擇阻止在Python中?

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

在某一點上,選擇將阻止和「選擇」是永遠不會得到打印。什麼會導致這種行爲?是否有可能存在某種僵局?

UPDATE:我在Ubuntu linux上運行,讀者對象是套接字。

+0

它是否阻止時間超過TIMEOUT秒? –

+1

哦,是的。 TIMEOUT爲0.1 –

回答

1

一些遠射......

如果超時是越來越設置爲無,然後選擇永遠不會超時。 此外,如果閱讀器變爲空列表,則選擇將始終等待完整的超時值(或者如果TIMEOUT爲無,則掛起)

2

是的,根據所討論的操作系統,確實有可能使某個文件描述符即使您已經明確要求它是非阻塞的,但在操作系統級別以不可中斷的方式阻止。根據您的操作系統,這些操作系統級錯誤(或「錯誤特徵」)可能會有解決方法,但要提供任何進一步的幫助,我們需要確切知道操作系統正在播放的內容以及readers列表中的確切類型。

+0

已更新。我使用Ubuntu Jaunty,讀者中的對象是套接字。 –

+0

@Jason,很奇怪 - 我無法想象會在您卓越的操作環境中造成這種僵局。也許看到如果使用select.poll或select.epoll是一種解決方法...? –

相關問題