python 多线程将大文件分开下载后在合并的实例
作者:听雪声的春天 发布时间:2023-05-12 06:27:36
标签:python,多线程,文件,下载
废话不多说了,上代码吧:
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


猜你喜欢
- 发现一个有意思的现象,labelimg打开图片和xml标签时候,看不到标注好的框框,仔细查看了xml文件,没发现什么异常,后面试一下,才发现
- CREATE TABLE tb(standards varchar(50), amount varchar(50), variation v
- 一、准备工作:1、安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据(以上工作直接用n
- Go语言提供了一个内置函数 delete(),用于删除容器内的元素,下面我们简单介绍一下如何用 delete() 函数删除 map 内的元素
- 本文实例讲述了Python线程threading模块用法。分享给大家供大家参考,具体如下:threading-更高级别的线程接口源代码:Li
- 静态方法不需要所在类被实例化就可以直接使用。静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。静态方法和静
- Oracle 的正规表达式的实施是以各种 SQL 函数和一个 WHERE 子句操作符的形式出现的。如果您不熟悉正规表达式,那么这篇文章可以让
- 首先声明:本人虽然在web前端岗位干了好多年,但无奈岗位对技术要求不高。html,css用的比较多,JavaScript自己原创的很少,基本
- 前言在深度学习中,有时候我们需要对某些节点的梯度进行一些定制,特别是该节点操作不可导(比如阶梯除法如 ),如果实在需要对这个节点进行操作,
- 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说。bootstrap:能够增加兼容性的强
- 有过Web经验的人喜欢使用:<meta http-equiv="refresh" content="1;
- 一、前言这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但是真正用的时候反而不是很多。有些页面考虑到访
- 现在只有山东、北京、上海等发达地区有考Python的这个举动,其他地区暂时还没有。首先,Python类似于c++,Python是一种面向对象
- 对 current_datetime 的一次赋值操作:def current_datetime(request): now =
- hello,大家好,我是Dream。最近有小伙伴私信我,说让我出一篇海龟画图,这其实我也不太能弄得明白,那在这里我和大家一块梳理一下!记得给
- 按照 官方教程 ,下载安装包,点击安装后,如需在命令行启动,还需设置命令路径:在命令行中,打开配置文件 .bash_profile:vim
- 本文实例讲述了js选项卡的实现方法。分享给大家供大家参考。具体分析如下:一、思路1. 获取元素;2. for循环按钮元素添加onclick(
- 如下所示:<!doctype html><html><head><meta charset=&qu
- 一、原理如题,我有一个模板课件.pptx:其内容:我想复制模板中间的某一页多次,比如复制第1页,然后复制3次,prs = Presentat
- 一、图例(legend)import plotly.io as pioimport plotly.express as pximport p