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