You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wget并行下载数千个文件遇卡顿问题求助

问题分析与解决方案

原代码存在的问题

  • 多进程任务分配不合理:原代码将URL批量传给子进程,单个进程需处理多个下载任务,结合subprocess.call的阻塞特性,易造成资源集中占用引发系统卡顿。
  • 变量名错误:doers函数中使用未定义的authorization变量,实际应为header,会导致子进程调用报错但无输出提示。
  • Windows多进程启动问题:未用if __name__ == '__main__':包裹主逻辑,触发重复创建进程的问题,导致系统卡顿且无下载结果。
  • 任务类型适配错误:下载属于IO密集型任务,多进程的进程切换开销远大于多线程,用多线程更高效。

方案一:多线程下载(推荐)

IO密集型任务优先用多线程,进程切换开销小,资源占用更低:

import os
import subprocess
from concurrent.futures import ThreadPoolExecutor

header = "authorizationkey"
rd = '.\\results\\'
app = r"C:\Users\daniel\Downloads\wget.exe"

# 提前创建保存目录,避免wget报错
os.makedirs(rd, exist_ok=True)

def download_single_url(url):
    try:
        # 屏蔽wget的输出,减少系统资源占用
        subprocess.call([
            app,
            '--header', header,
            '-P', rd,
            url
        ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        print(f"完成下载: {url.split('/')[-1]}")
    except Exception as e:
        print(f"下载失败 {url.split('/')[-1]}: {str(e)}")

# 根据网络带宽调整线程数,建议10-20
with ThreadPoolExecutor(max_workers=15) as executor:
    executor.map(download_single_url, urls)

方案二:修正后的多进程代码

如果坚持用多进程,需修正任务分配和启动逻辑:

import os
import subprocess
import multiprocessing as mp

header = "authorizationkey"
rd = '.\\results\\'
app = r"C:\Users\daniel\Downloads\wget.exe"

os.makedirs(rd, exist_ok=True)

def download_single_url(url):
    try:
        subprocess.call([
            app,
            '--header', header,
            '-P', rd,
            url
        ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        print(f"完成下载: {url.split('/')[-1]}")
    except Exception as e:
        print(f"下载失败 {url.split('/')[-1]}: {str(e)}")

# Windows下必须用该判断包裹多进程主逻辑
if __name__ == '__main__':
    num_processes = mp.cpu_count() - 1
    with mp.Pool(num_processes) as pool:
        pool.map(download_single_url, urls)

额外优化建议

  • 屏蔽wget的标准输出和错误输出,避免大量日志占用系统资源。
  • 并发数不要设置过高,网络带宽有限,过多并发会导致单任务下载速度下降,反而降低整体效率。
  • 可添加断点续传参数-c到wget命令中,避免中断后重新下载整个文件。

内容的提问来源于stack exchange,提问作者Yuqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:15:11