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

使用Python同时运行多个脚本处理批量链接下载任务的高效方案

批量链接下载高效实现方案

你当前手动拆分文件、编写多份脚本的方案扩展性极差,完全可以用更简洁的方式实现,核心思路是把并发逻辑内置到单脚本中,无需手动拆分任务:

方案1:单脚本多线程并发(最推荐,IO密集型场景适配)

下载任务属于典型的IO密集型操作,用多线程即可充分利用带宽,不需要开多个终端、多份脚本:

import pandas as pd
import requests
from concurrent.futures import ThreadPoolExecutor

# 自定义配置:最大并发数、CSV路径、结果存储路径
MAX_WORKERS = 4
CSV_PATH = "your_links.csv"
RESULT_PATH = "output.csv"

def download_link_info(link):
    # 单个链接的处理逻辑,可替换为自己的实现
    try:
        resp = requests.get(link, timeout=10)
        # 此处添加自己的信息解析逻辑
        return {"link": link, "status": resp.status_code, "content": resp.text[:100]}
    except Exception as e:
        return {"link": link, "status": "failed", "error": str(e)}

if __name__ == "__main__":
    # 一次性读入所有链接
    df = pd.read_csv(CSV_PATH, header=None)
    all_links = df[0].tolist()
    
    # 多线程并发处理
    with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
        results = list(executor.map(download_link_info, all_links))
    
    # 结果存储
    pd.DataFrame(results).to_csv(RESULT_PATH, index=False)

你需要调整并发数的时候,只要修改MAX_WORKERS参数即可,哪怕处理百万行数据也不需要改动其他逻辑。

方案2:单脚本分片执行(适合需要分开跑分片的场景)

如果你确实需要把任务拆分到不同终端执行(比如避免单进程挂了全量重跑),也不需要写多份脚本,只要给脚本加命令行参数指定分片规则即可:

import pandas as pd
import argparse

# 接收命令行参数
parser = argparse.ArgumentParser()
parser.add_argument("--total-shards", type=int, required=True, help="总分片数")
parser.add_argument("--shard-id", type=int, required=True, help="当前执行的分片ID,从0开始")
args = parser.parse_args()

if __name__ == "__main__":
    df = pd.read_csv("your_links.csv", header=None)
    all_links = df[0].tolist()
    # 自动取当前分片对应的链接
    shard_links = all_links[args.shard_id::args.total_shards]
    
    # 此处添加自己的处理逻辑
    for link in shard_links:
        # 处理链接
        pass

执行时只需要在不同终端传入不同分片参数即可,比如分4片跑的时候:

# 终端1跑第1分片
python download.py --total-shards 4 --shard-id 0
# 终端2跑第2分片
python download.py --total-shards 4 --shard-id 1
# 以此类推

后续要分50片跑百万行数据,只要修改--total-shards参数即可,不需要修改脚本代码。

实用优化建议

  • 加断点续跑逻辑:把已经处理完成的链接存入单独的日志文件,每次启动脚本先过滤已完成的链接,中途崩溃重启不需要重跑全量数据
  • 加异常捕获:单个链接处理失败不要中断整个脚本,把失败链接存入单独的失败列表,后续单独重跑
  • 控制请求速率:如果目标网站有反爬限制,可以给单个请求加固定延迟,避免被封IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:54:08