MPI信号处理

Set*_*son 5 python signals mpi

使用时mpirun,是否可以^C在正在运行的代码中捕获信号(例如,由生成的SIGINT )?

例如,我正在运行并行化的python代码。except KeyboardInterruptpython blah.py我自己运行时,我可以捕获那些错误,但是当我运行时,则无法捕获mpirun -np 1 python blah.py

有人有建议吗?甚至找到如何在C或C ++编译程序中捕获信号也将是一个有用的开始。

如果我向生成的Python进程发送信号,它们可以正确处理这些信号;但是,发送到父orterun进程的信号(即,由于超过了群集上的墙时间,或在终端上按了Control-C)将立即杀死所有内容。

Tor*_*rek -2

信号模块支持使用以下命令设置信号处理程序signal.signal

将信号 signalnum 的处理程序设置为函数处理程序。handler 可以是一个带有两个参数的可调用 Python 对象(见下文),也可以是特殊值 signal.SIG_IGN 或 signal.SIG_DFL 之一。之前的信号处理程序将被返回...

import signal
def ignore(sig, stack):
  print "I'm ignoring signal %d" % (sig, )

signal.signal(signal.SIGINT, ignore)
while True: pass
Run Code Online (Sandbox Code Playgroud)

如果您将 a 发送SIGINT到运行此脚本的 Python 解释器(通过kill -INT <pid>),它将打印一条消息并继续运行。