当前位置 博文首页 > 一条IT:【python实战】多线程下载文件
?点赞再看,养成好习惯
哈喽,大家好,我是一条。
相信大家都遇到过下载文件过慢的时候,今天教大家多线程下载,快到飞起。
1.获取文件大小
根据url获得请求头后发现是一个json串,格式化后找到大小
res=requests.head(url)
size = int(res.headers['Content-Length'])
2.分割文件
n=5
spos = []
fpos = []
persize=size//n #每一份的大小
intsize=persize*n #整份的大小
for i in range(0,intsize,persize):
spos.append(i) #每一段的初值
fpos.append(i+persize-1) #每一段的终值
if(intsize<size):
fpos[n-1]=size #不能整除的剩余部分
3.下载并写入文件
try:
header={}
header["Range"] = "bytes={}-{}".format(spos,fpos) #截取一部分
result=requests.get(url,headers=header)
fp.seek(spos) #找到文件写到的指针位置,在后面续写
fp.write(result.content)
except Exception:
print(Exception)
4.对下载方法用多线程
import threading
for i in range(0,n):
t=threading.Thread(
target=load, #下载方法
args=(
url,spos[i],fpos[i],fp
)
)
t.setDaemon(True)
t.start()
tmp.append(t)
for i in tmp:
i.join()
5.测速
t0=time.time()
t1=time.time()
to=t1-t0
print("total_time:%.2f s"% to)
speed=float(size)/(1000*(to))
print("speed:%.2f KB/s"% speed)
找到某盘下载地址(浏览器下载记录里有)total size: 6975060
开2个线程:
total_time:42.45 s
speed:164.33 KB/s开20个线程:
total_time:4.77 s
speed:1463.42 KB/s
?
我是一条,一个在互联网摸爬滚打的程序员。
道阻且长,行则将至。大家的?【点赞,收藏,关注】?就是一条创作的最大动力,我们下期见!
注:关于本篇博客有任何问题和建议,欢迎大家留言!
?
cs