2012-03-19 51 views
6

我的代碼就死在這個函數調用:feedparser與超時

feedparser.parse("http://...") 

此工作過。該網址甚至無法在瀏覽器中打開。 你會如何治療這種情況?有沒有超時的可能性?我希望繼續下去,好像什麼事都不會發生(僅在打印某條消息或記錄此問題時)

回答

11

您可以使用socket.setdefaulttimeout()指定全局超時。

超時可能會限制單個套接字操作可能持續的時間 - feedparser.parse()可能執行許多套接字操作,因此花在dns上的總時間,建立tcp連接,發送/接收數據可能會更長。見Read timeout using either urllib2 or any other http library

+0

OK,我用它,但不知道是否行得通,因爲無盡的加載URL再次生效。 – xralf 2012-03-19 15:33:16

6

使用Python requests庫網絡IO,feedparser只解析:

# Do request using requests library and timeout 
try: 
    resp = requests.get(rss_feed, timeout=20.0) 
except requests.ReadTimeout: 
    logger.warn("Timeout when reading RSS %s", rss_feed) 
    return 

# Put it to memory stream object universal feedparser 
content = BytesIO(resp.content) 

# Parse content 
feed = feedparser.parse(content)