【问题标题】:Reading multiple files using multiprocessing in Python and concatenating read values在 Python 中使用多处理读取多个文件并连接读取值
【发布时间】:2026-01-23 17:00:02
【问题描述】:

我有 100 个 csv 文件,每个文件存储相同数量的列。我不想一次读一个,而是想实现多处理。

为了表示,我创建了 4 个文件:Book1.csv、Book2.csv、Book3.csv、Book4.csv,它们分别在 A 列起始行 1 中存储数字 1 到 5。

我正在尝试以下方法:

import pandas as pd
import multiprocessing
import numpy as np

def process(file):
    return pd.read_csv(file)

if __name__ == '__main__':
    loc = r'I:\Sims'
    fname = [loc + '\Book1.csv', loc + '\Book2.csv', loc + '\Book3.csv', loc + '\Book4.csv']
    p = multiprocessing.Pool()

    for f in fname:
        p.apply_async(process, [f])

    p.close()
    p.join()

我从link 得到了上述代码的想法。

但是上面的代码并没有产生我期望的结果:

1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5

编辑: 我想将每个文件加载到单独的处理器中并组合文件内容。由于我要加载和合并内容的文件有 100 多个,我希望如果我一次加载 4 个文件(我的 PC 有 4 个处理器)可以加快处理速度。

【问题讨论】:

  • 我没有看到您的代码正在产生 any 输出,更不用说预期的输出了。你想达到什么目的?您想如何处理数据?
  • 如果您经常使用大量表格数据,您可以查看 dask:dask.pydata.org/en/latest
  • 您的代码在将数据帧返回到父进程后会丢弃它们。您可以将 for 循环替换为 dataframes = pool.map(process, fname) 并将它们放入列表中。考虑到操作是 I/O 绑定的,并且您增加了将数据帧从子级传递到父级的开销,您可能会发现这比仅在 1 个进程中读取它们需要更长的时间。
  • @tdelaney “在 1 个进程中读取它们”是什么意思?

标签: python multiprocessing


【解决方案1】:

试试这个

import pandas as pd
import multiprocessing
import numpy as np

def process(file):
    return pd.read_csv(file)

if __name__ == '__main__':
    loc = r'I:\Sims'
    fname = [loc + '\Book1.csv', loc + '\Book2.csv', loc + '\Book3.csv', loc + '\Book4.csv']
    

    with multiprocessing.pool(5) as p: #Create a pool of 5 workers
        result = p.map(process, fname)
    print(len(result))

【讨论】: