作者yodxxxd (yodxxxd)
看板Python
標題retrieve如何設timeout並重試?
時間Tue Dec 29 12:08:21 2015
我在寫一支程式
它會使用urllib.URLopener()開啟檔案連結,並使用retrieve函式將檔案儲存
但有時候可能是目標server的問題,執行到retrieve的時候會整個卡住,且程式不會停止
因為檔案只有幾十KB而已,所以時間上應該都不會超過10秒
想說可以給retrieve設個timeout,假設10秒,若超過10秒就自動重試
請問有辦法做到嗎?謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.176.184
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1451362103.A.D3F.html
1F:推 kenduest: 用 requests , requests.get() 可傳 timeout 方式看看 12/29 12:53
2F:推 kenduest: urllib open 似乎也有 timeout, 不過整個不符合你需求 12/29 13:10
3F:→ kenduest: 抱歉回應沒有回答到答案 12/29 13:23
4F:推 ocean5566: try .... except .... 12/29 21:25
5F:→ ocean5566: * 加上 while 若抓完了就break出去 12/29 21:26
6F:→ kenduest: 這個問題剛想到似乎得用 gevent 方式來解決才會簡單 12/29 22:39
8F:→ kenduest: 不過檔案很小感覺一般不需要這種方案才對 12/29 22:41
9F:→ kenduest: 若檔案很大,一般大多使用 requests 會搭配 stream=True 12/29 22:41
10F:→ kenduest: 然後iter_content() 方式指定chunk size 讀進來處理 12/29 22:42