我一直在網上尋找解決方案來解決我的Python問題。我正嘗試使用urllib2連接從HTTP服務器讀取可能層出不窮的數據流。它是一些交互式通信的一部分,所以重要的是我可以獲取可用的數據,即使它不是一個完整的緩衝區。似乎沒有辦法讓read
\ readline
返回可用的數據。它會在返回之前永遠阻止整個(無盡的)流等待。便祕的Python urllib2插座
即使我使用fnctl將底層文件描述符設置爲非阻塞,urllib2文件對象仍然會阻止!一般來說,似乎沒有辦法讓python文件對象在read
上返回所有可用數據(如果有的話),否則返回阻塞。
我見過一些關於尋求幫助的人的帖子,但我沒有看到任何解決方案。是什麼賦予了?我錯過了什麼嗎?這看起來像這樣一個正常的用例,完全毀了!我希望利用urllib2的能力來檢測配置的代理和使用分塊編碼,但我不能,如果它不會合作。
編輯:根據要求,這裏是一些示例代碼
客戶:
connection = urllib2.urlopen(commandpath)
id = connection.readline()
現在假設服務器使用塊傳輸編碼,並寫入一個塊往下流和塊包含行,然後等待。連接仍然打開,但客戶端在緩衝區中有數據等待。
我不能得到read
或readline
返回我知道它已經等待的數據,因爲它試圖讀直到連接結束。在這種情況下,連接可能永遠不會關閉,因此它將永遠等待或直到發生非活動超時,切斷連接。一旦連接斷開,它將返回,但這顯然不是我想要的行爲。
我不確定我是否正確理解您要實現的目標。你什麼意思是阻止?你的意思是你希望你的腳本能夠在流不再提供更多數據或其他東西時繼續執行嗎? – jsalonen 2010-10-15 09:40:25
請提供一些示例代碼;我們至少需要提出任何建議。 – tzot 2010-10-15 14:43:00