Python 3.x MPI4PY奇怪操作系统错误
我有一个复杂的MPI4PY脚本,它给出了一个看似不可能的错误 脚本的重要部分是:Python 3.x MPI4PY奇怪操作系统错误,python-3.x,operating-system,mpi4py,Python 3.x,Operating System,Mpi4py,我有一个复杂的MPI4PY脚本,它给出了一个看似不可能的错误 脚本的重要部分是: for rnd in range(50): if rnd > 0: WEIGHT_FILE = '{}/weights_{}.wts'.format(WORK_DIR, rnd - 1) WORK_DIR = '{}'.format(rnd) if PROCESS_NUM == 0: if not os.path.isdir(WORK_DIR)
for rnd in range(50):
if rnd > 0:
WEIGHT_FILE = '{}/weights_{}.wts'.format(WORK_DIR, rnd - 1)
WORK_DIR = '{}'.format(rnd)
if PROCESS_NUM == 0:
if not os.path.isdir(WORK_DIR):
os.mkdir(WORK_DIR)
....
所以在第二次迭代后,我得到了操作系统错误,无法创建目录,目录存在。这怎么可能?如果目录存在,则不应创建它
PROCESS_NUM
是MPI等级,因此只有一个进程应该尝试创建它。是否存在某种竞争条件或锁定错误?有什么想法吗?在检查之前,您需要创建完整的路径名:
if not os.path.isdir(os.path.join(full_path, WORK_DIR)):
让我们使用:
os.makedirs(WORK_DIR, exist_ok=True)
我似乎找到了答案,我深入研究了体系结构,与python无关
我正在将
SLURM
distribution manager与mpich
一起使用,在其中一个节点上安装了open mpi
以及mpich
,造成了一些麻烦。对于所有分配,该节点上的内核编号为0/1,导致脚本中出现争用条件,导致多个内核获得相同的PROCESS\u NUM
我的变量WORK\u DIR
是一个显式的完整路径,如果我只是弹出一个命令行并简单地运行if os.path.isdir。。。打印(“asd”)
将其签出,因此我确信该目录存在。默认值如下所示:WORK\u DIR='/home/username/ITERATION\u 0'并且它存在代码>你确定错误在“os.mkdir(WORK_DIR)”行中吗,因为你首先创建可变权重的文件,然后使用以前的WORK_DIR(来自上一次迭代)。我想我能够找到问题所在,我写了一个答案,我正在测试是否真的是这样,但它肯定与变量创建无关。