Python 用于并行下载多个文件的库或工具
我正在寻找一个python库或一个用于并行下载多个文件的命令行工具。我目前的解决方案是按顺序下载文件,这很慢。我知道你可以很容易地用python编写一个半途而废的线程解决方案,但我在使用线程时总是遇到令人讨厌的问题。它用于轮询来自网站的大量xml提要 我对解决方案的要求是:Python 用于并行下载多个文件的库或工具,python,http,parallel-processing,download,feed,Python,Http,Parallel Processing,Download,Feed,我正在寻找一个python库或一个用于并行下载多个文件的命令行工具。我目前的解决方案是按顺序下载文件,这很慢。我知道你可以很容易地用python编写一个半途而废的线程解决方案,但我在使用线程时总是遇到令人讨厌的问题。它用于轮询来自网站的大量xml提要 我对解决方案的要求是: 应该是可中断的。Ctrl+C应立即终止所有下载 即使主程序崩溃或引发异常,也不应该存在必须使用kill手动终止的剩余进程 它也应该在Linux和Windows上工作 它应该重试下载,对网络错误具有弹性,并且应该正确超时 不要
那么,最大的问题就是如何以尽可能有效的方式使用带宽而不超越任何界限。例如,一个数据提供者可能会认为它滥用,如果你打开20个同时连接到他们的数据提要。相反,最好使用一个或两个可重复用于多个文件的连接。或者你自己的联系可能会受到奇怪方式的限制。。我的isp限制了您可以进行的dns查找的数量,因此某种类型的dns缓存会很好。有很多选择,但很难找到一个适合您所有需要的 在您的情况下,请尝试以下方法:
至于您的所有需求,所有这些都可以使用普通的python线程模型来完成(是的,甚至可以使用Ctrl+C——我已经完成了)。我认为不存在这样一个完整的库,因此您可能需要编写自己的库。我建议为这项任务看一看。它们甚至提供了一个示例脚本。然后,您可以将其用于大多数其他需求,例如,和。urlgrabber是否符合您的需求 如果没有,你可以考虑志愿帮助完成它。联系作者Michael Stenner和Ryan Tomayko 更新:谷歌搜索“并行wget”可以得到以下结果:
您似乎有许多选项可供选择。我建议您选择Twisted,尽管它不是现成的解决方案,但它提供了主要的构建块,可以轻松获得您列出的每个功能,并且它不使用线程 如果您感兴趣,请查看以下链接:
您可以尝试pycurl,虽然界面一开始并不容易,但只要看一下示例,就不难理解了。我用它在贫瘠的linux机器上并行获取了1000个网页
aria2c有一个很好的xml rpc或json rpc接口,可以从脚本与之交互。我使用了标准的libs,
urllib.urlretrieve