我正在寻找一个python库或一个用于并行下载多个文件的命令行工具。我目前的解决方案是按顺序下载文件,速度很慢。我知道你可以很容易地用python编写一个半assed的线程解决方案,但是在使用线程时,我总是遇到一些恼人的问题。它用于轮询来自网站的大量xml提要。
我对解决方案的要求是:应该是可以中断的。Ctrl+C应该立即终止所有下载。
即使主程序崩溃或抛出异常,也不应该有必须使用kill手动终止的剩余进程。
它也应该在Linux和Windows上工作。
它应该重试下载,对网络错误有弹性,并且应该正确超时。
这应该是明智的,不要在同一台服务器上同时下载超过100次,而是以一种理智的方式排队。
它应该处理重要的http状态代码,如301、302和304。这意味着对于每个文件,它都应该将上次修改的值作为输入,并且只有在上次修改后才下载。
最好它应该有一个进度条,或者应该很容易为它编写一个进度条来监视所有文件的下载进度。
最好应该利用http keep alive来最大化传输速度。
请不要建议我如何实施上述要求。我正在寻找一个现成的,经过战斗测试的解决方案。
我想我也应该描述一下我想要什么。。。我有大约300个不同的数据源作为xml格式的文件,从50个数据提供程序提供服务。每个文件的大小在100kb到5mb之间。我需要经常对他们进行民意调查(每几分钟一次),以确定他们中是否有任何人需要处理新数据。因此,下载程序使用http缓存来最小化要获取的数据量是很重要的。显然它也使用gzip压缩。
那么最大的问题是如何在不跨越任何边界的情况下尽可能有效地使用带宽。例如,如果您同时打开20个到其数据源的连接,则一个数据提供程序可能会认为这是滥用。相反,最好使用一个或两个可用于多个文件的连接。或者你自己的联系可能会受到奇怪的限制。。我的isp限制了dns查找的数量,所以使用某种dns缓存比较好。