python 多线程将大文件分开下载后在合并的实例
作者:听雪声的春天 时间:2023-05-12 06:27:36
废话不多说了,上代码吧:
import threading
import requests
import time
import os
class Mythread(threading.Thread):
def __init__(self,url,startpos,endpos,f):
super(Mythread,self).__init__()
self.url=url
self.startpos=startpos
self.endpos=endpos
self.fd=f
def download(self):
print('start thread:%s at %s'%(self.getName(),time.time()))
headers={'Range':'bytes=%s-%s'%(self.startpos,self.endpos)}
res=requests.get(self.url,headers=headers)
self.fd.seek(self.startpos)
self.fd.write(res.content)
print('Stop thread:%s at%s'%(self.getName(),time.time()))
self.fd.close()
def run(self):
self.download()
if __name__=="__main__":
url='http://www.wendangxiazai.com/word/b-cfbdc77931b765ce050814a9-1.doc'
filename=url.split('/')[-1]
filesize=int(requests.head(url).headers['Content-Length'])
print('%s filesize:%s'%(filename,filesize))
threadnum=3
threading.BoundedSemaphore(threadnum)#允许线程个数
step=filesize//threadnum
mtd_list=[]
start=0
end=-1
tempf = open('E:\Python\py\web'+filename,'w')
tempf.close()
mtd_list=[]
with open('E:\Python\py\web'+filename,'rb+')as f:
#获得文件句柄
fileno=f.fileno()#返回一个整型的文件描述符,可用于底层操作系统的 I/O 操作
while end<filesize-1:
start=end+1
end=start+step-1
if end>filesize:
end=filesize
print ('Start:%s,end:%s'%(start,end))
dup=os.dup(fileno)#复制文件句柄
fd=os.fdopen(dup,'rb+',-1)
t=Mythread(url,start,end,fd)
t.start()
mtd_list.append(t)
for i in mtd_list:
i.join()
f.close()
来源:https://blog.csdn.net/grs294845170/article/details/71403725
标签:python,多线程,文件,下载
0
投稿
猜你喜欢
ajax局部刷新一个div下jsp内容的方法
2024-05-02 17:04:45
Web标准下该如何“插入”图像
2008-03-17 13:01:00
webpack-dev-server自动更新页面方法
2024-04-19 09:48:10
成功解决ValueError: Supported target types are:('binary', 'multiclass'). Got 'continuous' instead.
2023-01-24 03:59:00
Python操作Redis之设置key的过期时间实例代码
2022-02-11 06:13:05
Python基于多线程操作数据库相关问题分析
2024-01-26 05:18:21
C#如何在窗体程序中操作数据库数据
2024-01-22 13:31:41
SQL Server Alert发送告警邮件少了的原因
2024-01-27 14:15:38
基于Python实现自动化文档整理工具
2021-10-01 01:29:19
ASP.NET Core中的Options选项模式
2024-05-13 09:16:59
Python3实现汉语转换为汉语拼音
2022-02-28 11:27:54
日常收集整理php正则表达式(超常用)
2024-05-03 15:35:49
详解python requests中的post请求的参数问题
2023-09-20 07:50:40
构建可视化 web的 Python 神器streamlit
2021-05-03 16:56:05
教你如何在WordPress发布文章时自定义文章作者名称
2023-11-12 07:47:11
结合OpenCV与TensorFlow进行人脸识别的实现
2021-07-06 08:44:28
python-图片流传输的思路及示例(url转换二维码)
2021-06-18 14:48:44
python实现高斯投影正反算方式
2022-11-17 08:58:19
浅谈如何提高PHP代码的质量
2024-06-05 09:47:05
关于python中remove的一些坑小结
2022-09-22 02:14:31