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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python中的匿名函数使用简介
Apr 27 Python
Python简单实现安全开关文件的两种方式
Sep 19 Python
python中的随机函数random的用法示例
Jan 27 Python
python通过tcp发送xml报文的方法
Dec 28 Python
Python爬虫学习之翻译小程序
Jul 30 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
python中round函数保留两位小数的方法
Dec 04 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
python高温预警数据获取实例
Jul 23 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
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
php生成excel文件的简单方法
2014/02/08 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
Python selenium如何设置等待时间
2016/09/15 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python如何进行时间处理
2020/08/06 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
C语言中break与continue的区别
2012/07/12 面试题
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
初二学生评语大全
2014/12/26 职场文书
热血教师观后感
2015/06/10 职场文书
投诉书范文
2015/07/02 职场文书
幼儿园大班教学反思
2016/03/02 职场文书