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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
用Python实现读写锁的示例代码
Nov 05 Python
pandas DataFrame创建方法的方式
Aug 02 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
通过实例解析Python调用json模块
Dec 11 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
python中如何写类
Jun 29 Python
python request 模块详细介绍
Nov 10 Python
python二维图制作的实例代码
Dec 03 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 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合并数组中相同元素的方法
2014/11/13 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
详解jQuery事件
2017/01/13 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
Python subprocess模块学习总结
2014/03/13 Python
python实现扫雷游戏
2020/03/03 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
物流管理专业求职信
2014/05/29 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
交通安全学习心得体会
2016/01/18 职场文书
导游词之江西赣州
2019/10/15 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python