我正在尝试通过write
模式的wb
函数下载位于网络上的文件。与通过Web浏览器的下载速度相比,文件的下载速度太慢(因为我具有高速Internet连接)。如何加快下载速度?有没有更好的方法来处理文件下载?
这是我的使用方式:
resp = session.get(download_url)
with open(package_name + '.apk', 'wb+') as local_file:
local_file.write(resp.content)
我已经尝试过requests
和urllib3
库的下载速度几乎相同。这是下载15 MB
文件的实验结果:
requests
:0:02:00.689587
urllib3
:0:02:05.833442
p.s。我的Python版本是3.7.0
,我的操作系统是Windows 10 version 1903
。
p.s。我已经调查了reportedly similar question,但是答案/评论无效。
答案 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))