對於我的項目,我必須檢查網站的狀態(在共享主機上)。'請求'python庫的DNS超時
我使用Python請求庫。
def getStatusCode(url):
try:
return requests.head(url,timeout=0.3).status_code
except:
return -1
此代碼在MacOS 10.10中使用Python3.4以及類似http://www.google.com的網址很有效。如果我拔掉ISP電纜,我立即發現異常。
在Ubuntu服務器14.04與Python3.4,如果我拔掉我的ISP電纜,我永遠不會出現超時錯誤。 Raspbian的同樣問題。
經過一些測試,如果我用IP http://216.58.212.100替換url,Ubuntu服務器會引發一個異常,但由於我在共享的虛擬主機上,所以我無法使用IP。
經過一番研究後,我發現請求庫中的超時和DNS不是由它執行而是由操作系統執行的查找是有區別的。
所以我的問題是什麼是解決這個最美麗的方式?我是否需要添加額外的超時異常在Python這樣的:Timeout on a function call
謝謝
看起來像你回答自己的問題(這是鼓勵在SO)。我不知道更「美麗」的解決方案。我會發布你的最終代碼,並鏈接到任何有關超時操作系統超時的相關研究(這對其他讀者來說很有用)。 – Charlie 2015-04-06 13:39:30
謝謝查理。像我發佈的鏈接或[這裏](http://stackoverflow.com/questions/2281850/timeout-function-if-it-takes-too-long-to-finish)的解決方案的問題是,他們有一個解決方案最少一秒,我跳了一毫秒的分辨率。也許有可能僞造基於IP的請求並編輯頭部tu避免共享主機的問題。如果沒有更好的解決方案,我會發布我的解決方案:) – Kantium 2015-04-06 14:07:24
現在我很好奇 - 爲什麼需要毫秒的URL請求解析?如果您需要並行處理數千個請求,則需要執行一些工作。例如見[這裏](http://stackoverflow.com/questions/14245989/python-requests-non-blocking)。 – Charlie 2015-04-06 14:29:12