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学生信息管理系统的完整版本代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程

    Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程

    最近Python 3发布了新版本Python 3.6.0,好像又加入了不少黑魔法!由于暂时不能使用 apt-get 的方式安装 Python 3.6,所以还是直接编译源码安装吧。下面这篇文章就介绍了在Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程,需要的朋友可以参考下。
    2016-12-12
  • 详解Python map函数及Python map()函数的用法

    详解Python map函数及Python map()函数的用法

    map() 会根据提供的函数对指定序列做映射。下面通过本文给大家介绍Python map函数及Python map()函数的用法,需要的朋友参考下吧
    2017-11-11
  • python计算方程式根的方法

    python计算方程式根的方法

    这篇文章主要介绍了python计算方程式根的方法,涉及Python数学运算的相关技巧,需要的朋友可以参考下
    2015-05-05
  • python 将md5转为16字节的方法

    python 将md5转为16字节的方法

    今天小编就为大家分享一篇python 将md5转为16字节的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 基于pycharm导入模块显示不存在的解决方法

    基于pycharm导入模块显示不存在的解决方法

    今天小编就为大家分享一篇基于pycharm导入模块显示不存在的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python实现telnet客户端的方法

    python实现telnet客户端的方法

    这篇文章主要介绍了python实现telnet客户端的方法,分析了Python中telnetlib模块实现telnet操作的方法,并实例叙述了Telnet客户端的实现技巧,需要的朋友可以参考下
    2015-04-04
  • 11月编程语言排行榜 Python逆袭C#上升到第4

    11月编程语言排行榜 Python逆袭C#上升到第4

    11月编程语言排行榜 Python逆袭C#上升到第4,无论在哪个榜单中 Python 都是保持着非同寻常的增长速度,为什么Python增长的这么快
    2017-11-11
  • windows下Anaconda的安装与配置正解(Anaconda入门教程)

    windows下Anaconda的安装与配置正解(Anaconda入门教程)

    最近很多朋友学习python,很多朋友也推荐使用anaconda这个工具,但安装以后也不会使用,这里脚本之家小编就为大家整理一下比较详细的教程,方便自己也方便需要的朋友,希望大家以后多多支持脚本之家
    2018-04-04
  • python BeautifulSoup设置页面编码的方法

    python BeautifulSoup设置页面编码的方法

    这篇文章主要介绍了python BeautifulSoup设置页页编码的方法,本文直接给出代码救命,需要的朋友可以参考下
    2015-04-04

最新评论