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中条件判断语句的简单使用方法
Aug 21 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
django富文本编辑器的实现示例
Apr 10 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
NumPy中的维度Axis详解
Nov 26 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
python对execl 处理操作代码
Jun 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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
vue中的mvvm模式讲解
2019/01/31 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
如何在Django项目中引入静态文件
2019/07/26 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
体育口号大全
2014/06/18 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL