为什么 `pathlib.Path("xxx/yyy").unlink / mkdir / rmdir` 不是同步操作?
我正在使用Pytorch的
distributeDataparallel
一起使用Python的 pathlib.path.path
模块。
当我使用distribationDataParallel使用多进程时,我将删除或创建一个使用 path(“ xxx / yyy”)的文件。RMDIR / .UNLINK / .MKDIR < / code>仅在过程0中,该文件仅在
local_rank:local_rank:local_rank: 0
。
然后发生了奇怪的事情,看来 path(“ xxx / yyy”)。rmdir / .unlink / .mkdir < / code < / code < / code>操作是同步的,我的意思是
rank0中的过程
运行,但不会等到文件操作结束。因此,如果该操作之后有文件检查,例如 path(“ xxx/yyy”)。parent.iterdir
, rank0
和 rank1中的结果/code>或其他等级不等,这意味着
rank0
找到或找不到其他等级找不到或找到的某些文件。
该问题已通过添加同步锁定解决,代码很简单,如下所示:
from time import sleep
def wait_to_success(fn, no=False):
while True:
sleep(0.01)
if (no and not fn()) or (not no and fn()):
break
此功能如下:
remove_file_operation(filepath)
wait_to_success(filepath.exist, no=True)
或者
create_file_operation(filepath)
wait_to_success(filepath.exist, no=False)
需要注意 torch.distribed.barrier.barrier()
功能不适用于此问题。
因此,我很困惑为什么 pathlib.path
操作不等待此操作结束?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论