python-3.x - 使用 python 调用脚本后,对 mpirun 的 os.system() 调用不起作用
问题描述
我正在尝试在已经通过控制台、jupyter 笔记本或 Pycharm 控制台运行的 python 代码上运行 mpirun。所有代码运行正常,直到调用 mpirun 进程,该进程完全跳过。
我创建了两个代码,parallel.py
其中包含要由 mpirun 执行的操作;和coder.py
, 调用parallel.py
. 运行时coder.py
,所有关键步骤都会运行,除了调用parallel.py
. parallel.py
单独运行时,代码运行正常。
parallel.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
print('RANK %s'%comm.rank)
coder.py
import os, sys
syspath = os.path.dirname(os.path.realpath(__file__))
print('Running code')
com = 'mpirun -v -np 3 ' + str(sys.executable) + " -m mpi4py " + syspath + "/parallel.py"
os.system(com)
print('Done')
调用后python coder.py
:
预期的
Running code
RANK 1
RANK 0
RANK 2
Done
观察到的
Running code
Done
调用后python parallel.py
:
RANK 1
RANK 0
RANK 2
我猜想通过在进程已经“阻塞”os.system
之后调用并且由于这种“阻塞”而无法调用。python
os.system
mpirun
如果是这样,有没有办法绕过这个选项?
解决方案
在我的环境(Python 2.7、MPI4Py 3.0.1 和 MPICH 3.2.1)上,以下代码可以按预期工作:
import os
import sys
syspath = os.path.dirname(os.path.realpath(__file__))
print('Running code')
com = 'mpirun -np 3 ' + str(sys.executable) + " " + syspath + "/parallel.py"
print(com)
os.system(com)
print('Done')
似乎您不需要在命令行中提供模块 mpi4py,因为您将它导入到 parallel.py 文件中。另外,我删除了 -v 选项,这增加了很多冗长。
推荐阅读
- python - 如何批量应用地图操作?
- node.js - Heroku错误无法解决:找不到错误命令“build”
- android - 如何以编程方式启动 SavedAccessPointsWifiSettings?
- kentico - 媒体未显示以供预览
- c++ - C++ 计算字符串 mod 字符串
- tomcat - 在 Tomcat 7.0.73 和 7.0.92 之间的某个地方,AllowLinking 停止工作
- wpf - 在使用 HelixWpf 工具包创建的 Cube 上使用不同的纹理
- tensorflow - 如何使用 TensorFlow custom_gradient 定义 ReLU?
- dockerfile - 使用 Podman 连接到 VPN
- python-3.x - 为什么在这种情况下 arr 未定义?