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 相关文章推荐
使用python3.5仿微软记事本notepad
Jun 15 Python
Linux CentOS7下安装python3 的方法
Jan 21 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
numpy中的delete删除数组整行和整列的实例
May 09 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
浅析Django中关于session的使用
Dec 30 Python
python中有帮助函数吗
Jun 19 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
详解Python中的文件操作
Jan 14 Python
详解Python常用的魔法方法
Jun 03 Python
使用Python获取字典键对应值的方法
Apr 26 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 冒泡排序算法的实现代码
2010/08/08 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
华为慧通面试题
2012/09/11 面试题
优秀护士演讲稿
2014/04/30 职场文书
保护地球的标语
2014/06/17 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
求职自我评价范文
2015/03/09 职场文书
幼儿园教师求职信
2015/03/20 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python