如何使用python下载时优雅地超时

use*_*503 10 python exception-handling download

我正在下载一个包含以下代码的大量文件:

try:
    urllib.urlretrieve(url2download, destination_on_local_filesystem)
except KeyboardInterrupt:
    break
except:
    print "Timed-out or got some other exception: "+url2download
Run Code Online (Sandbox Code Playgroud)

如果在刚刚启动连接时服务器在URL url2download上超时,则会正确处理最后一个异常.但有时服务器响应,并开始下载,但服务器太慢,即使一个文件也需要几个小时,最终它会返回如下内容:

Enter username for Clients Only at albrightandomalley.com:
Enter password for  in Clients Only at albrightandomalley.com:
Run Code Online (Sandbox Code Playgroud)

并挂起(虽然如果通过浏览器下载相同的链接,则不会使用用户名/密码).

我在这种情况下的意图是 - 跳过这个文件然后转到下一个文件.问题是 - 怎么做?有没有办法在python中指定下载一个文件可以工作多长时间,如果已经花费了更多时间,请中断并继续前进?

Bin*_*eng 8

尝试:

import socket

socket.setdefaulttimeout(30)


Jac*_*son 3

这里有一个关于这个的讨论。注意事项(除了他们提到的之外):我还没有尝试过,他们正在使用urllib2, not urllib(这对你来说会是一个问题吗?)(实际上,现在我想起来,这种技术可能会起作用对于urllib,也)。