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


Posted in Python onNovember 09, 2018

废话不多说了,上代码吧:

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中下划线的使用方法
Mar 27 Python
python实现telnet客户端的方法
Apr 15 Python
Python合并字符串的3种方法
May 21 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
django 微信网页授权登陆的实现
Jul 30 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
python中有函数重载吗
May 28 Python
python中如何对多变量连续赋值
Jun 03 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 #Python
浅谈python写入大量文件的问题
Nov 09 #Python
启动Atom并运行python文件的步骤
Nov 09 #Python
Python产生Gnuplot绘图数据的方法
Nov 09 #Python
python pyheatmap包绘制热力图
Nov 09 #Python
Django 视图层(view)的使用
Nov 09 #Python
Python创建一个空的dataframe,并循环赋值的方法
Nov 08 #Python
You might like
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现删除文件与目录的方法
2014/11/10 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python实现list由于numpy array的转换
2018/04/04 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
什么是索引指示器
2012/08/20 面试题
中学校庆方案
2014/03/17 职场文书
《学会合作》教学反思
2014/04/12 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
综合素质评价自我评价
2015/03/06 职场文书
生日寿星公答谢词
2015/09/29 职场文书
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL