【发布时间】:2017-11-30 14:48:37
【问题描述】:
这是我在 Jupyter Notebook %%bash 魔法单元中的最初问题/观察结果,该单元也在 IPython 控制台中重现。我打算从笔记本页面启动几个 MPI 程序。在这里,我使用date系统命令作为一个简单的复制器。
In [1]: %%bash
...: echo "First"
...: mpirun -np 2 date
...: echo "Second"
...: mpirun -np 2 date
...: echo "End"
...:
First
mar. juin 27 15:17:36 CEST 2017
mar. juin 27 15:17:36 CEST 2017
只执行第一个mpirun 命令,之后的所有命令都不会执行。此行为直接用subprocess.Popen 重现,请参见下面的示例代码:
from subprocess import *
from IPython.utils import py3compat
def test(s):
p = Popen(['bash'], stdout=PIPE, stderr=PIPE, stdin=PIPE)
out, err = p.communicate(s.encode('utf8', 'replace'))
print(py3compat.bytes_to_str(out))
test("""echo "First"
mpirun -np 2 date
echo "Second"
mpirun -np 2 date
echo "End" """)
我可能遗漏了一些东西,但Popen 似乎在第一个mpirun 之后停止执行每个命令。当所有内容都放在一行上时,我得到了预期的结果,但对于 IPython 魔术单元来说,这并不是很有趣:
test("""echo "First"; mpirun -np 2 date; echo "Second";mpirun -np 2 date; echo "End" """)
关于Popen 挂起的原因有什么想法吗?
感谢您的反馈。
(在 Linux 上测试,使用 Python-2.7.13 和 IPython-5.4.1,还使用 Python 3.6.1 和 IPython 6.1.0,并使用多个版本的 OpenMPI-1.10.x 和 2.1.x)
【问题讨论】:
-
我正在使用 Python 3.6.1 和 iPython 6.1.0,我没有这个问题。 [1]:i.stack.imgur.com/78dut.png 我正在使用 Python 3.6.1 和 iPython 6.1.0,我没有这个问题。在此处输入图像描述我看到您更改了 Python 版本和 iPython 版本。您的 bash 中可能有一些设置导致了这种行为。
标签: python ipython mpi jupyter-notebook