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发送邮件示例(支持中文邮件标题)
Feb 16 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Django实现文件上传和下载功能
Oct 06 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
Python实现简单的猜单词小游戏
Oct 28 Python
Python用户自定义异常的实现
Dec 25 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 fread()使用技巧
2010/01/22 PHP
php解析url的三个示例
2014/01/20 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
详解PHP归并排序的实现
2016/10/18 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
Promise扫盲贴
2019/06/24 Javascript
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
2014年销售内勤工作总结
2014/12/01 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
同乡会致辞
2015/07/30 职场文书
给学校的建议书400字
2015/09/14 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle