我在超级计算群集上运行带MPI的Python。我认为这是一种奇怪的不确定行为,我认为这是I / O复杂性的结果,而这些复杂性并不存在于我曾经使用过的单一机器上。
我的代码所做的一件事就是经常使用os.makedirs
创建目录。我也知道我通常不应该向文件系统写入少量数据 - 这最终会导致数据卡在某个缓冲区而不能长时间写入。我怀疑这可能发生在我的目录创建调用上,然后稍后代码尝试在目录存在之前写入目录中的文件。两个问题:
flush
和os.fsync
。这些需要一个文件对象。是否有相应的目的,以确保目录已创建?答案 0 :(得分:1)
创建新目录实际上与编写少量数据相同。它添加了一个inode。
mkdir(或os.mkdirs)失败的唯一方法是目录是否存在 - 否则将始终创建目录。就缓冲数据而言 - 这种情况不太可能发生 - 即使是日记文件系统也会定期同步。
如果您有非确定性行为,只需将您的目录创建/写入try / except / finally中的该目录,这需要付出一些努力吗?但实际上 - 对这些代码的需求暗示了一些更加险恶的东西,并且可能是一个更大的问题。