python 多线程将大文件分开下载后在合并的实例

 更新时间:2018年11月09日 09:21:28   作者:听雪声的春天  
今天小编就为大家分享一篇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()

以上这篇python 多线程将大文件分开下载后在合并的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python多线程实例教程

    Python多线程实例教程

    这篇文章主要介绍了Python多线程,对比了新旧版本的Python在实现多线程的特点,并采用threading模块的实例来讲述了多线程的技巧,需要的朋友可以参考下
    2014-09-09
  • python PyAUtoGUI库实现自动化控制鼠标键盘

    python PyAUtoGUI库实现自动化控制鼠标键盘

    这篇文章主要介绍了python PyAUtoGUI库实现自动化控制鼠标键盘,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • python列表中删除多条字典信息的三种方法

    python列表中删除多条字典信息的三种方法

    本文主要介绍了python列表中删除多条字典信息的三种方法,主要包括列表推导式,filter()函数,del 关键字这三种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Python实现平行坐标图的绘制(plotly)方式

    Python实现平行坐标图的绘制(plotly)方式

    今天小编就为大家分享一篇Python实现平行坐标图的绘制(plotly)方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python绘制随机网络图形示例

    python绘制随机网络图形示例

    今天小编就为大家分享一篇python绘制随机网络图形示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python tcp传输代码实例解析

    Python tcp传输代码实例解析

    这篇文章主要介绍了Python tcp传输代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 200 行python 代码实现 2048 游戏

    200 行python 代码实现 2048 游戏

    2048这个小游戏大家都不陌生,应该都玩过,之前已经在网上见过各个版本的2048实现了,有JAVA、HTML5等,今天我就给大家来一个我200 行python 代码实现的2048 游戏,感兴趣的朋友一起看看吧
    2018-01-01
  • 基于Python实现俄罗斯方块躲闪小游戏

    基于Python实现俄罗斯方块躲闪小游戏

    这篇文章主要为大家详细介绍了如何基于Python实现有趣的俄罗斯方块躲闪小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • pycharm设置注释颜色的方法

    pycharm设置注释颜色的方法

    今天小编就为大家分享一篇pycharm设置注释颜色的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Django同时连接多种数据库的实现

    Django同时连接多种数据库的实现

    在开发Django项目的时候,很多时候都是使用一个数据库,即settings 中只有default数据库,但是有一些项目确实也需要使用多个数据库,本文主要介绍了Django同时连接多种数据库的实现,感兴趣的可以了解一下
    2023-11-11

最新评论