如何使用Python加快文件的下载速度?

时间:2019-06-15 15:38:46

标签: python python-3.x python-requests urllib3

我正在尝试通过write模式的wb函数下载位于网络上的文件。与通过Web浏览器的下载速度相比,文件的下载速度太慢(因为我具有高速Internet连接)。如何加快下载速度?有没有更好的方法来处理文件下载?

这是我的使用方式:

resp = session.get(download_url)
with open(package_name + '.apk', 'wb+') as local_file:
    local_file.write(resp.content)

我已经尝试过requestsurllib3库的下载速度几乎相同。这是下载15 MB文件的实验结果:

  • requests0:02:00.689587
  • urllib30:02:05.833442

p.s。我的Python版本是3.7.0,我的操作系统是Windows 10 version 1903

p.s。我已经调查了reportedly similar question,但是答案/评论无效。

1 个答案:

答案 0 :(得分:1)

看起来很奇怪,但这很有意义-浏览器会缓存下载内容,而直接写入文件则不会。

考虑:

from tempfile import SpooledTemporaryFile
temp = SpooledTemporaryFile()
resp = session.get(download_url)
temp.write(resp.content)
temp.seek(0)
with open(package_name + '.apk', 'wb') as local_file:
    local_file.write(resp.content)

可能更快。

如果您可以创建对本地文件的异步写入,则不会阻止您的程序。

  import asyncio
  async def write_to_local_file(name, spool_file):
      spool_file.seek(0)
      with open(package_name + '.apk', 'wb') as local_file:
          local_file.write(spool_file.read())

然后:

from tempfile import SpooledTemporaryFile
temp = SpooledTemporaryFile()
resp = session.get(download_url)
temp.write(resp.content)
asyncio.run(write_to_local_file("my_package_name", temp))