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中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
python实现UDP协议下的文件传输
Mar 20 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 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 定界符格式引起的错误
2011/05/24 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
jQuery 表格插件整理
2010/04/27 Javascript
Javascript事件实例详解
2013/11/06 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python僵尸进程产生的原因
2017/07/21 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python查看模块,对象的函数方法
2018/10/16 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
应用英语专业自荐信
2014/01/26 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
检讨书范文
2015/01/27 职场文书
党支部半年考察意见
2015/06/01 职场文书
退休欢送会主持词
2015/07/01 职场文书
婚宴新娘致辞
2015/07/28 职场文书
关爱空巢老人感想
2015/08/11 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers