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

Python多进程批量读取大文件时顺序执行未并行问题求解

问题根因

你的代码没有实现并行的核心问题是:在for循环内每次仅给pool.map()传递1个文件的列表。pool.map()是阻塞方法,必须等传入的所有任务执行完成才会返回结果,所以你相当于每次只提交1个任务、等执行完再提交下一个,自然就是串行执行。

修复代码

你不需要循环逐个提交任务,直接把所有文件的列表一次性传给pool.map()即可,进程池会自动调度10个进程并行处理,最多同时跑10个任务,自动排队分配剩下的文件:

import multiprocessing
import pandas as pd
import glob

def process(fileread):
    print(multiprocessing.current_process())
    return pd.read_csv(fileread, header=None, sep=r'\s\s+|,', engine='python')

if __name__ == '__main__':
    pool = multiprocessing.Pool(10)
    # 一次性获取所有dat文件列表,直接传给map批量提交
    file_list = sorted(glob.glob("*.dat"))
    # 所有结果会按文件列表的顺序返回,你可以后续自行处理
    results = pool.map(process, file_list)
    # 遍历输出结果
    for res in results:
        print(res)
    pool.close()
    pool.join()

补充说明

  • 如果你不需要等所有结果返回再处理,想拿到一个结果就处理一个,可以把pool.map()换成pool.imap_unordered(),返回结果的顺序和文件提交顺序无关,处理完就返回,效率更高。
  • 代码里的正则分隔符建议加r前缀标记为原始字符串,避免转义字符异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:00