我有以下test_mpi.py
python 脚本:
from mpi4py import MPI
import time
class Foo:
def __init__(self):
print('Creation object.')
def __del__(self):
print('Object destruction.')
foo = Foo()
time.sleep(10)
如果我在不求助于 mpiexec 的情况下执行它,使用简单的python test_mpi.py
5 秒后按 CTRL+C,我会得到以下输出:
ngreiner@Nathans-MacBook-Pro:~/Documents/scratch$ python test_mpi.py
Creation object.
^CTraceback (most recent call last):
File "test_mpi.py", line 26, in <module>
time.sleep(10)
KeyboardInterrupt
Object destruction.
ngreiner@Nathans-MacBook-Pro:~/Documents/scratch$
如果我将它嵌入到 mpiexec 执行中,使用mpiexec -np 1 python test_mpi.py
5 秒后再次按 CTRL+C,我现在得到:
ngreiner@Nathans-MacBook-Pro:~/Documents/scratch$ mpiexec -np 1 python test_mpi.py
Creation object.
^Cngreiner@Nathans-MacBook-Pro:~/Documents/scratch$
来自 python 的回溯和 __del__ 方法的执行已经消失。对我来说主要的问题是不执行 __del__ 方法,它应该在我的实际应用程序中进行一些清理。
知道从 mpiexec 启动 Python 执行时如何执行 __del__ 方法吗?
非常感谢您的帮助,
(我的系统配置:macOS High sierra 10.13.6、Python 3.7.4、open-mpi 4.0.1、mpi4py 3.0.2。)