Python 3.x 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)

我有一个复杂的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):
            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(来自上一次迭代)。我想我能够找到问题所在,我写了一个答案,我正在测试是否真的是这样,但它肯定与变量创建无关。