python + wget多线程下载

该博客介绍了如何使用Python结合wget实现多线程下载功能。首先从txt文件中读取下载链接,然后定义下载函数Download_wget_OS,通过shell命令执行下载任务。接着创建自定义线程类MyThread,以便于跟踪线程执行状态。最后,通过Multi_process函数实现并行下载,根据线程数量动态调整,等待子线程完成并更新线程列表。
摘要由CSDN通过智能技术生成

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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值