Python 在所有计算机中终止MPI进程

Python 在所有计算机中终止MPI进程,python,parallel-processing,mpi,kill,Python,Parallel Processing,Mpi,Kill,假设我在25台不同的机器上运行一个包含25个进程的MPI程序。程序在其中一个名为“主”的位置启动,命令如下 mpirun -n 25 --hostfile myhostfile.txt python helloworld.py 这是在Linux上使用一些bash脚本执行的,它使用mpi4py。有时,在执行过程中,我想停止所有机器中的程序。我不在乎这样做是否得体,因为我可能需要的数据已经保存了 通常,我在“master”的终端上按Ctrl+C,我认为它的工作原理如上所述。这是真的吗?换句话说,它

假设我在25台不同的机器上运行一个包含25个进程的MPI程序。程序在其中一个名为“主”的位置启动,命令如下

mpirun -n 25 --hostfile myhostfile.txt python helloworld.py
这是在Linux上使用一些bash脚本执行的,它使用mpi4py。有时,在执行过程中,我想停止所有机器中的程序。我不在乎这样做是否得体,因为我可能需要的数据已经保存了

通常,我在“master”的终端上按Ctrl+C,我认为它的工作原理如上所述。这是真的吗?换句话说,它会在所有机器上停止这个特定的MPI程序吗

我尝试过的另一种方法是在“master”中获取进程的PID并杀死它。我对此也不确定


上述方法是否如所述有效?如果没有,你还有什么建议?请注意,我希望避免使用MPI调用来达到其他讨论和建议的目的,如
MPI\u Abort

当您通过按Ctrl+C或通过将信号指向其PID(例如,通过
kill-INT…
)将SIGINT发送到
mpirun
时,它捕获信号并使用一些底层机制,特定于MPI实现,向作业中的所有MPI列组发送kill信号。出于好奇,如果发送
SIGKILL
而不是
SIGINT
,这是否仍然正确?
SIGKILL
无法捕获,使用它将对MPI作业产生依赖于实现的不良影响。作业很可能会继续运行,直到列组注意到它们无法再与
mpirun
通信。请参阅。当您通过按Ctrl+C或将信号定位到其PID(例如,通过
kill-INT…
)将SIGINT发送到
mpirun
时,它捕获信号并使用特定于MPI实现的一些底层机制,向作业中的所有MPI列组发送kill信号。出于好奇,如果发送的是
SIGKILL
而不是
SIGINT
,这仍然是真的吗?
SIGKILL
无法捕获,使用它将对MPI作业产生依赖于实现的不良影响。作业很可能会继续运行,直到列组注意到它们无法再与
mpirun
通信。看见