retrieve如何設timeout並重試?

看板Python作者 (yodxxxd)時間10年前 (2015/12/29 12:08), 編輯推噓3(307)
留言10則, 2人參與, 最新討論串1/1
我在寫一支程式 它會使用urllib.URLopener()開啟檔案連結,並使用retrieve函式將檔案儲存 但有時候可能是目標server的問題,執行到retrieve的時候會整個卡住,且程式不會停止 因為檔案只有幾十KB而已,所以時間上應該都不會超過10秒 想說可以給retrieve設個timeout,假設10秒,若超過10秒就自動重試 請問有辦法做到嗎?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.176.184 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1451362103.A.D3F.html

12/29 12:53, , 1F
用 requests , requests.get() 可傳 timeout 方式看看
12/29 12:53, 1F

12/29 13:10, , 2F
urllib open 似乎也有 timeout, 不過整個不符合你需求
12/29 13:10, 2F

12/29 13:23, , 3F
抱歉回應沒有回答到答案
12/29 13:23, 3F

12/29 21:25, , 4F
try .... except ....
12/29 21:25, 4F

12/29 21:26, , 5F
* 加上 while 若抓完了就break出去
12/29 21:26, 5F

12/29 22:39, , 6F
這個問題剛想到似乎得用 gevent 方式來解決才會簡單
12/29 22:39, 6F

12/29 22:41, , 8F
不過檔案很小感覺一般不需要這種方案才對
12/29 22:41, 8F

12/29 22:41, , 9F
若檔案很大,一般大多使用 requests 會搭配 stream=True
12/29 22:41, 9F

12/29 22:42, , 10F
然後iter_content() 方式指定chunk size 讀進來處理
12/29 22:42, 10F
文章代碼(AID): #1MWWStq_ (Python)
文章代碼(AID): #1MWWStq_ (Python)