我有一个执行某些功能的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文件的运行。
答案 0 :(得分:5)
使用multiprocessing.pool.ThreadPool
类创建一个由(在您的情况下)四个线程组成的线程池。使用例如subprocess.Popen
任务提交到池中pool.map
。然后,Python中的四个线程将产生一个Fortran进程。