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

如何使用Python multiprocessing加速Excel读取实现多文件合并

多进程并行读取合并Excel实现方案

核心注意事项

新手使用multiprocessing跑不通90%是踩了以下几个坑:

  • Windows系统下Python多进程默认采用spawn启动模式,所有多进程执行逻辑必须放在if __name__ == "__main__":代码块内,否则会触发子进程递归启动,直接报错或卡死
  • 子进程只负责单文件读取、预处理这类无状态的任务,不要向子进程传递ExcelWriter、队列实例这类无法序列化的对象,参数尽量用字符串、数字这类简单类型
  • 单文件处理函数必须定义在顶层作用域,不能写在主代码块内部,否则无法被多进程序列化传递
  • Windows路径中的反斜杠存在转义问题,路径字符串前加r标记为原始字符串可避免路径识别错误

可直接运行的代码

先清理原代码中未使用的冗余导入,多进程逻辑采用进程池实现,逻辑清晰易维护:

import pandas as pd
import multiprocessing as mp

def read_single_excel(file_path):
    """子进程执行:单文件读取+列去重预处理"""
    df = pd.read_excel(file_path)
    df = df.loc[:, ~df.columns.duplicated()].copy()
    return df

if __name__ == "__main__":
    # CSV转Excel逻辑
    read_csv = pd.read_csv(r'Data\SampleCollectionID.csv')
    excel_writer = pd.ExcelWriter(r'Data\converted_CSV_file.xlsx')
    read_csv.to_excel(excel_writer, index=False)
    excel_writer.close()  # 新版本pandas已废弃save()方法,用close()兼容性更好

    # 多进程并行读取所有目标文件
    filenames = [r'Data/converted_CSV_file.xlsx', r'Data/LabData.xlsx']
    # 进程数不超过CPU核心数,文件数少时和文件数量保持一致即可
    with mp.Pool(processes=min(len(filenames), mp.cpu_count())) as pool:
        df_list = pool.map(read_single_excel, filenames)

    # 主进程统一做横向拼接、输出结果
    final_frame = pd.concat(df_list, axis=1)
    final_frame.to_excel('combinedData.xlsx', index=False)

补充说明

  • 如果你要处理的Excel文件数量少于3个、单文件体积很小,不建议用多进程:多进程启动本身有固定开销,小任务下速度反而不如单进程循环读取;当文件数量多、单文件体积大时,并行读取的速度优势才会明显。
  • 如果需要纵向按行合并,只需要把pd.concat的axis=1改成axis=0即可。

内容的提问来源于stack exchange,提问作者João Pimenta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:54:29