使用python下载数千个文件的最快方法?

时间:2013-12-07 12:17:10

标签: python csv python-3.x urllib

我需要下载一千个csv文件大小:20KB - 350KB。到目前为止,这是我的代码:

我正在使用urllib.request.urlretrieve。有了它我下载了一千个文件,大小全部一起:250MB,超过一个小时。

所以我的问题是:

如何在一小时内更快地下载千位csv文件?

谢谢!

4 个答案:

答案 0 :(得分:4)

最有可能的原因是需要花费时间来打开连接发出请求,获取文件并再次关闭连接。

一小时内的一千个文件每个文件为3.6秒,这很高,但您下载的网站可能很慢。

要做的第一件事是使用HTTP / 2.0并为Keep-Alive的所有文件保持一个连接打开。最简单的方法是使用Requests库,然后使用session

如果这还不够快,那么您需要使用multiprocessingthreads进行多次并行下载。

答案 1 :(得分:1)

您应该尝试使用多线程并行下载多个文件。看看multiprocessing,特别是工人池。

答案 2 :(得分:1)

问题不太可能是带宽(连接速度),因为任何网络连接都可以保持带宽。问题是延迟 - 建立连接和设置传输所需的时间。我对Python一无所知,但建议你拆分你的列表并在可能的情况下在多个线程或进程上并行运行查询 - 因为问题几乎肯定不是CPU,也不是带宽限制。所以,我说并行发出多个请求,所以一堆设置都可以同时进行,每个设置的时间都被掩盖在另一个设置之后。

顺便说一下,如果你的千元文件达到5MB,那么每个文件大约为5kB,而不是你说的20kB到350kB。

答案 3 :(得分:0)

如果没有a)为您和提供商提供更快的互联网连接,或者b)让提供商提供您需要的zip或tar.gz格式的文件,您可能无法达到这个速度。 。

另一种可能性是使用亚马逊等云服务将文件存入云端,在那里压缩或压缩文件,然后将zip文件下载到本地计算机。由于云服务位于互联网骨干网上,因此服务速度应该比您快。不利的一面是,您最终可能需要根据您使用的服务付费。