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