MPI4PY奇怪的操作系统错误

时间:2017-11-05 16:42:32

标签: python-3.x operating-system mpi4py

我有一个复杂的MPI4PY脚本,它给出了一个看似不可能的错误。

剧本的重要部分:

@NonNull
@Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<Contact> filtered = new ArrayList<>();
            for(Contact contact:ORIGNAL){
                if(contact.getName().toLowerCase().contains(constraint)){
                    filtered.add(contact);
                }
            }
            FilterResults results = new FilterResults();
            results.count = filtered.size();
            results.values = filtered;
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if(constraint.length() > 0 ) {
                CONTACTS = (ArrayList<Contact>) results.values;
                notifyDataSetChanged();
            }
        }
    };
}

所以在第二次迭代后我得到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) .... 。这怎么可能?如果目录存在,则不应创建它。 OS Error, cannot create directory, directory exists是MPI排名,因此只有一个进程应该尝试创建它。是否存在某种竞争条件或锁定错误?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您需要在检查之前创建完整路径名:

if not os.path.isdir(os.path.join(full_path, WORK_DIR)):

让我们使用:

os.makedirs(WORK_DIR, exist_ok=True)

答案 1 :(得分:0)

我似乎找到了答案,我深入了解架构,与python无关。

我在SLURM使用了mpich分发管理器,并且在其中一个节点上安装了open-mpi以及mpich并导致了一些问题。对于所有分配,该节点上的核心编号为0/1,导致脚本中的竞争条件导致多个核心具有相同的PROCESS_NUM