我在循环中下载了一大堆带有以下代码的文件:
try:
urllib.urlretrieve(url2download, destination_on_local_filesystem)
except KeyboardInterrupt:
break
except:
print "Timed-out or got some other exception: "+url2download
如果在刚刚启动连接时服务器在URL url2download上超时,则会正确处理最后一个异常。但有时服务器响应,并开始下载,但服务器太慢,即使一个文件也需要几个小时,最终会返回如下内容:
Enter username for Clients Only at albrightandomalley.com:
Enter password for in Clients Only at albrightandomalley.com:
并挂起(虽然如果通过浏览器下载相同的链接,则无法使用用户名/密码)。
我在这种情况下的意图是 - 跳过这个文件然后转到下一个文件。问题是 - 怎么做?有没有办法在python中指定下载一个文件可以工作多长时间,如果已经花费了更多时间,打断并继续前进?
答案 0 :(得分:8)
尝试:
import socket
socket.setdefaulttimeout(30)
答案 1 :(得分:4)
如果您不仅限于开箱即用的python附带内容,那么urlgrabber模块可能会派上用场:
import urlgrabber
urlgrabber.urlgrab(url2download, destination_on_local_filesystem,
timeout=30.0)
答案 2 :(得分:3)
讨论了这个here。注意事项(除了他们提到的那些):我还没有尝试过,他们使用的是urllib2
,而不是urllib
(这对你来说会有问题吗?)(实际上,现在我想一想,这种技术也可能适用于urllib
。
答案 3 :(得分:2)
关于超时功能,这个问题更为笼统: How to limit execution time of a function call in Python
我已经使用我在那里的答案中描述的方法来编写等待文本函数,该函数超时以尝试自动登录。如果您想要类似的功能,可以在这里引用代码:
http://code.google.com/p/psftplib/source/browse/trunk/psftplib.py