我可能会问一个非常基本的问题,但我真的不知道如何在 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/