精华内容
下载资源
问答
  • python + wget多线程下载

    千次阅读 2020-07-28 13:09:44
    python + wget多线程下载读取链接下载函数MyThread并行下载代码 由于有个项目需要下载大量数据,数据大多是每个100MB左右,所以我想使用python + wget多线程下载的方式下载,设定下载子线程个数不得多于设定的个数,...


    由于有个项目需要下载大量数据,数据大多是每个100MB左右,所以我想使用python + wget多线程下载的方式下载,设定下载子线程个数不得多于设定的个数,已经带有超时和重试次数的设定。

    读取链接

    这些链接我是从另外一个程序得到的,主要是是读取fits文件,然后将适合的链接输出到txt里,这里的readline_txt函数就是将txt里的链接读到一个列表里。

    下载函数

    Download_wget_OS(List,PATH)是利用wget shell命令来下载对应的链接,并返回此shell命令的执行状态。

    MyThread

    我写了个Thread的子类,对应我需要的情况,主要是增加返回值,用于检查子线程1的执行情况。

    并行下载

    Multi_process(List,PATH):#并行下载,这里的主要想法是设定一个列表,将子线程都添加进去,总线程个数>最大设定子线程个数+1,(主线程也算一个),则等待,如果小于等于就检查子线程列表里的结果,统计,并剔除掉列表里对应的完成的线程,然后再先列表添加新子线程。

    代码

    '''
    docstring
    '''
    import os
    import subprocess #shell 命令
    import threading
    import time
    
    PATH = r'./Data'
    output = './output.txt'#待下载的链接
    #结果输出
    timeout_txt = './timeout.txt'
    succeed_txt = './succeed.txt'
    wrong_txt = './wrong.txt'
    
    Max_process_number = 6 #子线程个数
    trytime = 3 #重试次数
    Timeout = 60 #超时时间
               
    def readline_txt(output):
        with open(output, 'r') as f:#读取连接
            LINK = f.readlines()#读取所有行
        read = LINK[-1]#读取最后一行
        LINK.pop()#移除掉最后一行注释
        print(read + ' check ' + str(len(LINK)))
        return LINK
    
    def writing_txt_line(file_name,contents,Mode = 1):#输出记录
        if Mode == 0 :
            with open(file_name, 'w') as f:  
                f.writelines('')
        else :
            with open(file_name, 'a') as f:  
                f.writelines(contents+'\n') 
    
    def Download_wget_OS(List,PATH): #url列表下载
        cmd = 'wget -c ' + List + ' -P '+ PATH + ' -t '+str(trytime) + ' -T ' + str(Timeout)
        #print(cmd+'\n')#打印命令
        status_subprocess = subprocess.call(cmd,shell=True)#返回程序状态
        #print('正在下载: '+List)
        #print(status_subprocess)
        file = List.rsplit('/',1)[-1]
        if status_subprocess == 0:
            print('下载成功:'+file)
            return '下载成功'
        elif status_subprocess == 1:
            print('链接错误:'+file)
            return '链接错误'
        elif status_subprocess == 4:
            print('链接超时:'+file)
            return '链接超时'
        else :
            print('其他错误:',status_subprocess,+file)
        return '其他错误'
        
    class MyThread(threading.Thread):#自己写的类,带2个输入参数
      def __init__(self, List, PATH):#必须含有__init__方法和run方法
        threading.Thread.__init__(self)#初始化 函数进入时都先执行这一块
        self.List = List
        self.PATH = PATH
        self.result = 0
      def run(self):                #然后进入函数将运行的内容
        self.result = Download_wget_OS(self.List,self.PATH)
      def get_result(self): #其它方法 返回结果
        return self.result
      def Name(self):       #其它方法 返回名字
        return self.List
        
    def Multi_process(List,PATH):#并行下载
        threads_group = []#线程池
        succeed_count = 0
        linkerror_count=0
        timeout_count = 0
        other_count = 0
        Total = len(List)
        writing_txt_line(timeout_txt, '' ,Mode=0)##清空文本
        writing_txt_line(succeed_txt, '' ,Mode=0)
        writing_txt_line(wrong_txt,   '' ,Mode=0)
        
        for i in range(len(List)):
            url_list = List[i].strip()#去掉头尾多余符号
            #总线程数小于等于Max_process_number 主线程也算一个
            
            New_threads = MyThread(url_list,PATH)#自定义的类
            threads_group.append(New_threads)    #线程名添加进池里
            New_threads.setDaemon(True)          #设为守护线程
            New_threads.start()
            
            print('启动线程:'+url_list.rsplit('/',1)[-1])
            print('总线程数:',len(threading.enumerate()),' 下载线程数:',len(threads_group))
            while (len(threading.enumerate()) > Max_process_number):
                #总线程数小于等于Max_process_number时退出
                pass#不操作
            #检查子线程 并计数
            for threads in threads_group:
                #计数部分
                if  threads.get_result() == '下载成功':
                    succeed_count = succeed_count +1
                    writing_txt_line(succeed_txt,threads.Name())#写入对应连接
                    #在这里可以加入校验
             
                elif threads.get_result() == '链接超时':
                    timeout_count = timeout_count +1
                    writing_txt_line(timeout_txt,threads.Name())#写入对应连接
                    
                elif threads.get_result() == '链接错误':
                    linkerror_count = linkerror_count +1
                    writing_txt_line(wrong_txt,  threads.Name())#写入对应连接
                    
                elif threads.get_result() == '其他错误':
                    other_count = other_count +1
                    writing_txt_line(wrong_txt,  threads.Name())#写入对应连接
           
                #移除已完成子线程
                if threads.get_result() !=  0 :# 检查哪个子线程执行完
                    print('移除线程:'+threads.Name().rsplit('/',1)[-1])
                    threads_group.remove(threads)
                    break
                print('总数:',Total,'下载成功:',succeed_count,'链接超时:',timeout_count,'链接错误:',linkerror_count,'其他错误:',other_count)         
        threads_group.join()   #需要子线程阻塞
        print('所有下载已启动')         
    
    if __name__ == '__main__':
        #Download_wget_OS(url,PATH)
        Multi_process(readline_txt(output),PATH)
        time.sleep(5)  
    
    展开全文
  • aria2c是一款非常好用的下载工具,支持多线程。 此处提供的是Windows版本,传输速度比wget快很多。 【使用方法】 注意:以下都是以批处理方式调用aria2c.exe 方法一:单文件下载 aria2c.exe -c -s 5 -...
  • 本程序是运用Python ,通过分析找到腾讯动漫的真实播放地址,然后用wget多线程下载
  • wget下载国外包的时间特别慢,所以找到一个多线程wget下载工具mwget 安装mwget 官方地址:http://sourceforge.net/projects/kmphpfm/?source=dlp # cd /usr/local/src/ # wget ...

    wget下载国外包的时间特别慢,所以找到一个多线程wget下载工具mwget

    安装mwget

    官方地址:http://sourceforge.net/projects/kmphpfm/?source=dlp

    # cd /usr/local/src/
    # wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2
    # tar -xjvf mwget_0.1.0.orig.tar.bz2
    # cd mwget_0.1.0.orig
    # ./configure
    # make
    # make install
    

    tar -xjvf mwget_0.1.0.orig.tar.bz2时候报如下错:

    tar (child): bzip2:无法 exec: 没有那个文件或目录
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    

    解决方法:

    yum install -y bzip2
    

    configure过程中如果出现如下错误:

    checking whether to enable maintainer-specific portions of Makefiles... no
    checking for g++... no
    checking for c++... no
    checking for gpp... no
    checking for aCC... no
    checking for CC... no
    checking for cxx... no
    checking for cc++... no
    checking for cl.exe... no
    checking for FCC... no
    checking for KCC... no
    checking for RCC... no
    checking for xlC_r... no
    checking for xlC... no
    checking whether the C++ compiler works... no
    configure: error: in `/usr/local/src/mwget_0.1.0.orig':
    configure: error: C++ compiler cannot create executables
    See `config.log' for more details
    

    执行如下命令:

    yum install gcc gcc-c++ gcc-g77
    

    configure过程中如果出现如下错误,请安装大于等于0.35版本的intltool

    checking for intltool >= 0.35.0... ./configure: line 6824: intltool-update: comman
    d not found found
    configure: error: Your intltool is too old.  You need intltool 0.35.0 or later.
    

    执行如下命令:
    yum -y install intltool

    mwget用法:
    mwget -h
    GNU MWget 0.1.0 ,一个非交互式多线程可移植的网络文件下载工具。
    用法: mwget [选项]…[URL]
    选项:
    -b, --debug 调试模式,显示调试信息
    -c, --count=num 设置重试次数为[num],不限制次数设置为“0“,默认设置为“99”。
    -d, --directory=dir 设置本地目录为[dir],默认值为当前目录。
    -f, --file=file 重命名下载后文件为[file]
    -h, --help 显示帮助信息。
    -i, --interval=num 设置FTP重试期限为[num]秒,默认为“5“。
    -n, --number=num 设置下载的线程数,默认开4个线程。
    -r, --referer=URL 使用“Referer: [URL]”在HTTP头中欺骗服务器。
    -t, --timeout=num 设置超时时间为[num]秒,默认设置是“30”。
    -v, --version 显示mwget的版本,然后退出。
    -x, --proxy=URL 设置代理 [URL]

    邮件BUG报告和讨论地址:sa@kmlinux.tkxiao_suo@hotmail.com
    BUG报告与讨论网站:http://mwget.sourceforge.net/ http://www.kmlinux.tk/
    我们欢迎您的BUG报告和建议!(喵~)

    展开全文
  • wget多线程版本(超级好用)

    千次阅读 2020-12-05 15:33:37
    # 下载bzip包 wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2 # b无zip工具需要安装(已安装忽略) yum install bzip2 # 解压 bzip2 -d mwget_0.1.0.orig.tar.bz2 #再...

    安装使用

    环境

    使用centos7
    

    安装

    # 下载bzip包
    wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2
    # b无zip工具需要安装(已安装忽略)
    yum install bzip2
    # 解压
    bzip2 -d mwget_0.1.0.orig.tar.bz2
    #再解压
    tar -xvf mwget_0.1.0.orig.tar
    # 进入解压目录
    cd mwget_0.1.0.orig
    # 执行configure
    

    执行configure

    # make命令可能会有错误
    make
    # make install
    make install
    

    使用对比

    mwget多线程下载
    mwget
    wget单线程下载
    wget
    可以看出来,还是有明显差异的

    问题解决

    make问题解决

    没有gcc环境

    GCC环境解决

    # 安装gcc-c++
    yum -y install gcc gcc-c++
    

    iniltool版本问题

    iniltool版本问题
    在这里插入图片描述

    # 升级intltool
    yum -y install intltool
    
    展开全文
  • 偶然发现了 axel 这个支持多线程下载工具,试用了几次之后,发现网络文件的下载速度提交了很多,决定将常用的下载工具替换为 axel。 1 安装 1、Linux 安装 CentOS 中安装 axel,axel 系统不自带,且 Yum 源也...

     

    对于在 Linux 的下载工具而言,比较常用的就是 wget 或者 curl,吾也一直用 wget 的方式进行网络上的资源下载。偶然发现了 axel 这个支持多线程的下载工具,试用了几次之后,发现网络文件的下载速度提交了很多,决定将常用的下载工具替换为 axel。

    axel是一个多线程分段下载工具,可以从ftp或http服务器进行下载。

    1 安装

    1、Linux 安装
    CentOS 中安装 axel,axel 系统不自带,且 Yum 源也没有 axel 的包,需要从网络中下载。
    可以在 https://centos.pkgs.org/ ,  http://pkgs.repoforge.org/axel/ 搜索找到并下载安装,下载rpm包安装。

    项目地址:https://github.com/axel-download-accelerator/axel

    $ wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/a/axel-2.4-9.el7.x86_64.rpm
    $ rpm -ivh axel-2.4-9.el7.x86_64.rpm
    

     

     yum install axel -y
    

    2、macOS 安装
    使用 brew 安装

    $ brew install axel
    

    源码安装

    wget https://github.com/axel-download-accelerator/axel/releases/download/v2.17.10/axel-2.17.10.tar.xz
    tar -xvf axel-2.17.10.tar.xz
    cd axel-2.17.10
    ./configure && make && make install
    

     在该目录下就有axel

    2 选项参数

    --max-speed=x , -s x         # 最高速度x
    --num-connections=x , -n x   # 连接数x
    --output=f , -o f            # 下载为本地文件f
    --search[=x] , -S [x]        # 搜索镜像
    --header=x , -H x            # 添加头文件字符串x(指定 HTTP header)
    --user-agent=x , -U x        # 设置用户代理(指定 HTTP user agent)
    --no-proxy , -N             # 不使用代理服务器
    --quiet , -q                # 静默模式
    --verbose ,-v               # 更多状态信息
    --alternate , -a            # Alternate progress indicator
    --help ,-h                  # 帮助
    --version ,-V               # 版本信息
    

    详细参数:   

    --max-speed=x, -s x

    指定最大下载速度。

     --num-connections=x, -n x

    指定链接的数量。

     --output=x, -o x

    指定下载的文件在本地保存的名字。如果指定的参数是一个文件夹,则文件会下载到指定的文件夹下。

    --search[=x], -S[x]

    Axel将会使用文件搜索引擎来查找文件的镜像。缺省时用的是filesearching.com。可以指定使用多少个不同的镜像来下载文件。
    检测镜像将会花费一定的时间,因为程序会测试服务器的速度,以及文件存在与否。

    --no-proxy, -N

    不使用代理服务器来下载文件。当然此选项对于透明代理来说无意义。

    --verbose

    如果想得到更多的状态信息,可以使用这个参数。

    --quiet, -q

    不向标准输出平台(stdout)输入信息。

    --alternate, -a

    指定这个参数后将显示一个交替变化的进度条。它显示不同的线程的进度和状态,以及当前的速度和估计的剩余下载时间。

    --header=x, -H x

    添加HTTP头域,格式为“Header: Value”。

    --user-agent=x, -U x

    有些web服务器会根据不同的User-Agent返回不同的内容。这个参数就可以用来指定User-Agent头域。缺省时此头域值包括“Axel”,它的版本号以及平台信息。

    --help, -h

    返回参数的简要介绍信息。

    --version, -V

    显示版本信息。

     

     至少要制定一个参数,如果是FTP下载的话,可以指定通配符进行下载, 程序会自行解析完整的文件名。可以指定多个URL进行下载,但是程序不会区分这些URL是否为同一个文件,换而言之,同一个URL指定多次,就会进行多次的下载。

     

    3 下载测试

    在同一台服务器上用官方的 CentOS Minimal ISO 镜像,分别用 wget 和 axel 做一个下载测试,文件大小 900M + 。

    $ wget http://mirror.sfo12.us.leaseweb.net/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
    

    结果:
    wget 下载用时 31s。

    $ axel -n 20 http://mirror.sfo12.us.leaseweb.net/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
    

    结果:
    axel 下载用时 12s。

    用axel下载东西时,容易出现 Too many redirects. 的错误,则使用最新版本即可。因为github强制使用https,axel会跳转到80端口,这样造成了死循环,github上面的最新版axel已经解决了这个问题。

    ===============aria2==============================

    https://github.com/aria2/aria2

    https://aria2.github.io/

    • 优点:比较全能,HTTP 下载和 BT 下载都有,性能也相当不错,速度不比迅雷慢
    • 缺点:无 UI,需要自备;配置麻烦,上手较难。


     axel与aria2c对比

    对比项axelaria2c
    支持的下载协议HTTP,HTTPS,FTP,FTPS等HTTP/HTTPS GEET方式, FTP,BitTorrent协议和fast扩展
    更改下载文件路径/名称-o-o
    限制连接数-n-x, –max-connection-per-server,默认为1
    限制下载速度-s 或 –max-speed–max-download-limit,默认不限速
    断点续传使用相同的axel命令即可-c
    替换进度条-a
    从文件获取输入不支持-i,–input-file
    下载BiTorrent文件种子和磁力链接不支持支持
    下载多个文件不支持-z

     使用对比

    用20个连接限制1.5M(默认的下载单位为Kb,1.5M=1500000kb)的速度下载deepin的镜像文件到/tmp目录下并改名为deepin15.5.iso文件不使用默认的下载进度条

    axel -a -n 20 -s 1500000 -o /tmp/deepin15.5.iso  https://mirrors.tuna.tsinghua.edu.cn/deepin-cd/15.5/deepin-15.5-amd64.iso
    

     用5个连接限速2M(不可使用小数)从含有deepin镜像文件http下载链接的文件中下载到/tmp目录下改名为deepin15.5.iso并要求下载中断之后能够继续下载

    aria2c -x 5 --max-download-limit=2M -c -i ~/deepin.txt 

    ==========================================

    mwget 

    安装

    wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2
    
    tar -xjvf mwget_0.1.0.orig.tar.bz2
    cd mwget_0.1.0.orig
    ./configure
    make
    make install

     mwget比wget速度,实测提升了至少4倍。因为缺省是4个线程,所以快了4倍。

    选项是:
    
    Options:
    -b, --debug Show the debug message
    -c, --count=num Set the retry count to [num], no limit when "0", the default is "99"
    -d, --directory=dir Set the local direcotry to [dir], the default is "."
    -f, --file=file Rename the file to [file]
    -h, --help A brief summary of all the options
    -i, --interval=num Set the ftp retry interval to [num] seconds, the default is "5"
    -n, --number=num Use [num] connections instead of the default (4)
    -r, --referer=URL Include `Referer: [URL]' header in HTTP request.
    -t, --timeout=num Set the connection timeout to [num] seconds, the default is "30"
    -v, --version Show the version of the mwget and exit
    -x, --proxy=URL Set the proxy [URL]

    参考资料:

    1. aria2 懒人安装教程
    2. Aria2+WebUI,迅雷倒下之后的代替品
    3. BT trackers 更新项目
    4. Aria2基础上手指南
    5. 解决Aria2 BT下载速度慢没速度的问题
    6. yaaw (国人开发的 Aria2 web-ui)
    7. bt-trackerlist 官方更新地址
    展开全文
  • axel -n 20 http://www.openslr.org/resources/18/data_thchs30.tgz
  • mwget 多线程版本wget下载工具

    千次阅读 2019-06-12 16:03:23
    mwget速度截图如下: [caption id="attachment_2372" align="alignnone" width="657"] mwget多线程下载速度[/caption] 2.2 wget速度测试 # wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.5.tgz...
  • Centos 安装 Axel 多线程下载 代替 Wget

    千次阅读 2019-08-27 21:07:22
    Axel 是 Linux 平台下的一款 HTTP/FTP 的高速下载工具,支持多线程以及断点续传,对于一些有速度限制的服务器上下载东西时,Axel 的速度就明显比 wget 要快一些 Centos6 安装方法 现在网上基本都是已经废弃的...
  • wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2 # 安装依赖关系包: yum install bzip2 gcc-c++ openssl-devel intltool -y bzip2 -d mwget_0.1.0.orig.tar.bz2 tar -...
  • 1.用wget下载多个文件: 用wget下载,由于限制,用wget命令一次只能下载一条链接。 如果你想要下载多条链接,一条一条的下载太慢了。...2.axel多线程下载(多线程超级快): axel多线程下载,真的很快。是普通下载的几倍
  • 经常使用wget进行文件下载,然而wget的处理速度并不如人意。遇到一些国外的站点,...m表示multi多线程的意思。 安装mwget 官网:http://sourceforge.net/projects/kmphpfm/?source=dlp wget http://jaist.dl.sour...
  • 一.Linux多线程下载命令axel编译安装 wget http://www.ha97.com/code/axel-2.4.tar.gz 或者 wget https://files.cnblogs.com/files/xiaochina/axel-2.4.tar.gz # 找到一个还可以下载的网址 # ubuntu可以直接使用...
  • 说明:因为python线程的性能问题,在python中使用多线程运行代码经常不能达到预期的效果。而有些时候我们的逻辑中又需要开更高的并发,或者简单的说,就是让我们的代码跑的更快,在同样时间内执行更多的有效逻辑、...
  • Ubuntu18.04 下的多线程下载工具mwget安装 linux运维在操作linux过程中,用得最多的linux下载工具想必一定是wget,没有看到哪一台服务器没装过wget的,或许有人使用ftp下载,也有人使用多线程的axel以及ProZilla,...
  • /*** 使用wget下载文件 * *@paramdisplayName appName *@paramcategory 分类 *@paramdownload_url 下载地址 *@return成功返回文件路径,失败返回null*/ public staticString downloadFileByWget(String displayName,...
  • linux axel 多线程下载

    2019-04-19 14:58:16
    linux axel 多线程下载 axel-2.4-1.el6.rf.x86_64,只适合Centos 6.x 系列!
  • 万一一个软件下载了一半,网断掉了,那么网恢复的时候,wget就会默认这个软件已经下载好了,因为在去下载一个文件之前,他会先生成一个.list文件,来做记录!如果直接去打开这个问题,那就是文件损坏。 axel这个...
  • 使用wget下载文件时十分缓慢 可使用mwget进行加速 其中m代表多线程的意思 1.安装mwget wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2 tar -xjvf mwget_0.1.0.orig...
  •  最近使用 wget 下载百度云资源,速度比较缓慢,在朋友推荐多线程下载后发现 wget 其实仅仅是一个单线程下载工具,在面对文件时会显得十分鸡肋,并且有许多诟病,比如无断点重连等等功能。 Axel 介绍 ...
  • 我尝试使用wget命令下载debian-6.0.6-amd64-netinst.iso,但是速度太慢,以至于我无法忍受。 4Kb/s ~ 17 Kb/s,就像奔跑的乌龟一样慢,如果我使用Chrome,速度甚至会更慢。我已经阅读了wget的帮助信息,似乎没有任何...
  • import os from threading import Thread #假定一个资源目录列表 ... '/home/下载/', '/home/视频/', ] filename = input('要下载的文件:') #判断资源库路径中文件是否存在,将存在的路径...
  • wget多线程网页抓取提供动力的 Go 程序 ###跑步铲: 安装 golang (osx): brew install hg brew install go 拉回购: git clone https://github.com/phact/shovel.git 跑铲: go run shovel.go 配置: ...
  • (1)本质核心是进程里执行os.system(“wget filename”),开17个进程的进程池意味着同时在下载17个文件。 (2)将指令全部放列表needgfsfile里面。 import datetime import multiprocessing import os def ...
  • Linux下的多线程下载工具——Axel

    千次阅读 2018-12-19 17:04:49
    当我们下载大文件时后,wget就显得速度有点慢了,特别是...支持多线程,高速; 支持断点续传; 支持多地址下载同一文件 支持HTTP/FTP下载 安装 Ubuntu下安装: sudo apt install axel 使用 axel [options] url1 [u...
  • 这是网上下载的,觉得挺不错就收藏在这里了 里面代码可能debug下载某些文件出错,发现是在一个什么trace里面

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,644
精华内容 9,057
热门标签
关键字:

wget多线程下载