retrieve如何設timeout並重試?

作者: yodxxxd (yodxxxd)   2015-12-29 12:08:21
我在寫一支程式
它會使用urllib.URLopener()開啟檔案連結,並使用retrieve函式將檔案儲存
但有時候可能是目標server的問題,執行到retrieve的時候會整個卡住,且程式不會停止
因為檔案只有幾十KB而已,所以時間上應該都不會超過10秒
想說可以給retrieve設個timeout,假設10秒,若超過10秒就自動重試
請問有辦法做到嗎?謝謝
作者: kenduest (小州)   2015-12-29 12:53:00
用 requests , requests.get() 可傳 timeout 方式看看urllib open 似乎也有 timeout, 不過整個不符合你需求抱歉回應沒有回答到答案
作者: ocean5566 (煙大屌熟男)   2015-12-29 21:25:00
try .... except ....* 加上 while 若抓完了就break出去
作者: kenduest (小州)   2015-12-29 22:39:00
這個問題剛想到似乎得用 gevent 方式來解決才會簡單http://paste.ofcode.org/rWk2upz7ik9icYjUYQAEeJ不過檔案很小感覺一般不需要這種方案才對若檔案很大,一般大多使用 requests 會搭配 stream=True然後iter_content() 方式指定chunk size 讀進來處理

Links booklink

Contact Us: admin [ a t ] ucptt.com