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获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
Python中除法使用的注意事项
Aug 21 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
python中Switch/Case实现的示例代码
Nov 09 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
Python PIL库图片灰化处理
Apr 07 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
十个Python自动化常用操作,即拿即用
May 10 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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/09/11 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
php分页查询的简单实现代码
2017/03/14 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python的gevent框架的入门教程
2015/04/29 Python
Python中的变量和作用域详解
2016/07/13 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python 获取等间隔的数组实例
2019/07/04 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
蔻驰法国官网:COACH法国
2018/11/14 全球购物
中科方德软件测试面试题
2016/04/21 面试题
会计毕业生求职简历的自我评价
2013/10/20 职场文书
班长自荐书范文
2014/02/11 职场文书
公司晚会策划方案
2014/05/17 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电