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

如何实现多目录压缩文件并行解压 提升现有批量处理代码运行效率

多进程优化压缩文件批量处理效率实现方案

你的场景属于IO+CPU混合密集型任务,13个目录的处理逻辑完全独立无依赖,非常适合用多进程并行改造,改造后总耗时可压缩到单目录处理的7分钟左右,符合你的预期。

改造步骤

  • 把原有单个zip文件的处理逻辑封装为独立的任务函数,避免进程间变量共享的额外开销
  • 先扫描全量符合匹配规则的zip文件,生成任务参数列表
  • 调用多进程池批量执行所有任务

完整改造后代码

import os
import fnmatch
import re
import datetime
import zipfile
from multiprocessing import Pool

# 处理单个zip文件的独立函数,所有依赖参数通过入参传入
def process_single_zip(params):
    zip_path, data_files, counter_part = params
    filename = os.path.basename(zip_path)
    
    # 原业务逻辑保留,仅做资源释放优化
    date_zipped_file_s = re.search('-(.\d+)-', filename).group(1)
    date_zipped_file = datetime.datetime.strptime(date_zipped_file_s, '%Y%m%d').date()      
          
    # 计算目标路径
    new_dir = os.path.normpath(os.path.join(os.path.relpath(zip_path, start=data_files), ".."))
    new = os.path.join(counter_part, new_dir)

    # 创建目录,exist_ok=True避免重复判断和并发创建冲突
    os.makedirs(new, exist_ok=True)
    
    # 用上下文管理器打开zip文件,自动释放资源
    with zipfile.ZipFile(zip_path) as zf:
        zf.extractall(new) 

    # 重命名逻辑保留
    files = os.listdir(new)
    for file in files:
        filesplit = os.path.splitext(os.path.basename(file))
        if not re.search(r'_\d{8}.', file):
            os.rename(os.path.join(new, file), os.path.join(new, filesplit[0]+'_'+date_zipped_file_s+filesplit[1]))

if __name__ == '__main__':
    # 这里替换为你自己的实际路径
    data_files = "/your/source/root/path"
    counter_part = "/your/target/root/path"
    pattern = '*.zip'
    
    # 第一步:先扫描所有符合条件的zip文件,生成任务列表
    task_list = []
    for root, dirs, files in os.walk(data_files): 
        for filename in fnmatch.filter(files, pattern):
            zip_path = os.path.join(root, filename)
            task_list.append( (zip_path, data_files, counter_part) )
    
    # 第二步:初始化多进程池,processes可根据实际情况调整,13个任务直接设13即可
    # 如果CPU核心数较少,也可以设为os.cpu_count()
    with Pool(processes=13) as pool:
        pool.map(process_single_zip, task_list)

注意事项

  • 若使用机械硬盘,并行数不要超过20,避免磁盘IO抢占导致效率下降,13个任务适配绝大多数存储设备
  • 路径建议统一使用绝对路径,避免多进程工作目录不一致引发的路径错误
  • 原有业务逻辑完全保留,仅优化了资源管理和并发调度,不会影响原有处理结果

内容的提问来源于stack exchange,提问作者Mediterráneo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:06:00