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
  • asp之家 网络编程 m.aspxhome.com