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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
python格式化字符串实例总结
Sep 28 Python
详解Python的Django框架中的通用视图
May 04 Python
Django返回json数据用法示例
Sep 18 Python
Python2中文处理纪要的实现方法
Mar 10 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
python 自动批量打开网页的示例
Feb 21 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
python3中for循环踩过的坑记录
Dec 14 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
用Python实现屏幕截图详解
Jan 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(2)
2006/10/09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP最常用的正则表达式
2017/02/13 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
zTree节点文字过多的处理方法
2017/11/24 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
python的id()函数解密过程
2012/12/25 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
北京振戎融通Java面试题
2015/09/03 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
原材料检验岗位职责
2014/03/15 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书