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如何通过protobuf实现rpc
Mar 06 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
Python爬虫工程师面试问题总结
Mar 22 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
Python绘制频率分布直方图的示例
Jul 08 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
Django密码系统实现过程详解
Jul 19 Python
wxPython多个窗口的基本结构
Nov 19 Python
详解python破解zip文件密码的方法
Jan 13 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
关于python类SortedList详解
Sep 04 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
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php操作MongoDB类实例
2015/06/17 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
js 幻灯片的实现
2011/12/06 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
python爬取音频下载的示例代码
2020/10/19 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
实习自我鉴定范文
2013/10/30 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL