Python,读取很多文件并合并结果

标签 python parallel-processing multiprocessing

我可能会问一个非常基本的问题,但我真的不知道如何在 python 中制作一个简单的并行应用程序。 我在一台有 16 个内核的机器上运行我的脚本,我想高效地使用它们。我有 16 个大文件要读取,我希望每个 cpu 读取一个文件,然后合并结果。 在这里,我举一个简单的例子来说明我想做什么:

  parameter1_glob=[]
  parameter2_glob[]


  do cpu in arange(0,16):
      parameter1,parameter2=loadtxt('file'+str(cpu)+'.dat',unpack=True)

      parameter1_glob.append(parameter1)
      parameter2_glob.append(parameter2)

我认为 multiprocessing 模块可能会有帮助,但我不明白如何将它应用到我想做的事情上。

最佳答案

我同意 Colin Dunklau 在他的评论中所说的,这个过程会在读写这些文件时遇到瓶颈,对 CPU 的需求很小。即使您有 17 个专用驱动器,您也不会用尽一个内核。此外,虽然我意识到这与您的实际问题无关,但您可能会遇到这些“巨大”文件的内存限制 - 将 16 个文件作为数组加载到内存中,然后将它们组合到另一个文件中几乎肯定会占用比你有。

查看 shell 脚本编写此问题可能会发现更好的结果。特别是,GNU sort使用内存高效的合并排序非常快速地对一个或多个文件进行排序 - 比使用 Python 或大多数其他语言编写的最仔细的应用程序快得多。

我建议避免任何类型的多线程工作,它会显着增加复杂性,但 yield 微乎其微。确保一次在内存中保留尽可能少的文件,否则很快就会用完。在任何情况下,您绝对希望在两个单独的磁盘上运行读取和写入。同时读取和写入同一磁盘的速度减慢非常痛苦。

关于Python,读取很多文件并合并结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672108/

相关文章:

python - 如何并行化对象数组上的方法调用?

python - python 中的多线程 : is it really performance effiicient most of the time?

c# - 如何在c#上划分数组?

python - 来自一个源代码树的多个分布

python - value_counts 在 DataFrame 中返回 float

python - 如何将 pandas 数据框列转换为 native python 数据类型?

performance - R 包 nlt/adlift/ebayesthresh 使用大量内存;如何提高性能?

R 拆分 DF 并并行运行测试

python - 使用 CSV.QUOTE_NONNUMERIC 而不引用标题

c# - 使用 Task.WaitAll() 时如何获取任务的返回值