0

我有一个atoms.out执行某些功能的 fortran 文件。我在 python 中调用该 fortran 文件:

values = subprocess.Popen(["./atoms.out", "./%s.klj" % test1, "./%s.out" % test1], stdout = subprocess.PIPE)

我看过Python PP,但我认为这不是我想要的,因为它使用 n 个 CPU 来完成一项工作。

fortran 文件进行的计算不是独立的,不能与python pp

所以我的问题是如何向多个不同的 CPU 提交多个作业,例如我有:7 个文件,我想在 4 个 CPU 上运行。

因此,每个作业分布为:

File1 -> CPU1
File2 -> CPU2
File3 -> CPU3
File4 -> CPU4

然后,当一个作业在 CPU 上完成时,它会替换为剩余的 3 个要运行的文件。SayFile1完成CPU1后被 替换File5,因此工作分配如下所示:

File5 -> CPU1
File2 -> CPU2
File3 -> CPU3
File4 -> CPU4

依此类推,直到它完成对 7 个文件的 fortran 文件的运行。

4

1 回答 1

5

使用multiprocessing.pool.ThreadPool该类创建一个由(在您的情况下)四个线程组成的线程池。使用 eg将任务提交subprocess.Popen到池中pool.map。然后,Python 中的四个线程将分别生成一个 Fortran 进程。

于 2012-09-10T12:41:59.900 回答