Python:将不同的作业提交给不同的CPU

时间:2012-09-10 12:35:08

标签: python

我有一个执行某些功能的fortran atoms.out文件。我在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个要运行的文件。说File1已在CPU1完成,它被File5替换,因此作业的分布如下:

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

等等,直到它完成了7个文件上的fortran文件的运行。

1 个答案:

答案 0 :(得分:5)

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