urlopen方法在Python 2.6之前是没有timeout参数的,只能通过全局的socket超时设置,2.6之后增加了timeoute参数。
我在Mac下使用自带的Python 2.6的urlopen,没有设置timeout参数,结果在网络环境不好的情况下,时常出现read()方法没有任何反应的问题,程序卡死在read()方法里,搞了大半天,才找到问题,给urlopen加上timeout就ok了,设置了timeout之后超时之后read超时的时候会抛出socket.timeout异常
不知道其它版本有没有这个问题,还只是2.6的问题
想要程序稳定还需要给urlopen加上异常处理,再加上出现异常重试,程序就完美了。
代码:
[python]
fails = 0
while True:
try:
if fails >= 3:
break
f = urllib2.urlopen(url,timeout=20)
page = f.read().decode(‘gbk’)
except:
fails += 1
else:
break
[/python]