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生成随机数的方法
Jan 14 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
Python解析并读取PDF文件内容的方法
May 08 Python
opencv python 图像去噪的实现方法
Aug 31 Python
如何使用Python标准库进行性能测试
Jun 25 Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 Python
Python random库使用方法及异常处理方案
Mar 02 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
sklearn的predict_proba使用说明
Jun 28 Python
python中yield的用法详解
Jan 13 Python
python中Pyqt5使用Qlabel标签播放视频
Apr 22 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代码
2013/12/03 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
yii2安装详细流程
2018/05/23 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python实现名片管理系统
2020/02/14 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
见习报告的格式
2014/10/31 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
农业项目投资意向书
2015/05/09 职场文书
驳回起诉裁定书
2015/05/19 职场文书
教师节主持词开场白
2015/05/29 职场文书