使用python下载千个文件的最快方式



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

我正在使用urllib.request.urlretrieve。有了它,我下载了一千个文件,所有文件的大小加在一起:250MB,持续一个多小时。

所以我的问题是:

如何以一小时以上的速度下载数千个csv文件

谢谢!

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

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

首先要做的是使用HTTP/2.0,并使用keep Alive为所有文件打开一个连接。最简单的方法是使用请求库,并使用会话。

如果这还不够快,那么您需要使用多处理或线程进行多次并行下载。

问题不大可能是带宽(连接速度),因为任何网络连接都可以保持该带宽。问题是延迟——建立连接和设置传输所需的时间。我对Python一无所知,但建议您拆分列表,并在可能的情况下在多个线程或进程上并行运行查询,因为问题几乎肯定既不涉及CPU,也不涉及带宽。所以,我的意思是并行地启动多个请求,这样一组设置就可以同时进行,并且每个设置所花费的时间都被掩盖在另一个请求之后。

顺便说一句,如果你的1000个文件达到5MB,那么它们每个大约是5kB,而不是你说的20kB到350kB。

您应该尝试使用多线程并行下载许多文件。看看多处理,尤其是工作池。

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

另一种可能性是使用亚马逊等云服务将文件发送到您的云位置,在那里压缩或压缩文件,然后将压缩文件下载到您的本地机器。由于云服务在互联网主干上,它的服务应该比你更快。不利的一面是,根据你使用的服务,你最终可能不得不为此付费。

最新更新