作者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/cn.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