gpt4 book ai didi

python - 使用 h5py 以写入模式打开已打开的 hdf5 文件

转载 作者:太空狗 更新时间:2023-10-30 01:25:46 27 4
gpt4 key购买 nike

我作为不同的进程同时运行同一个 Python 程序,这些都想写入同一个 hdf5 文件,使用 h5py Python 包。但是,只有一个进程可以在写入模式下打开给定的 hdf5 文件,否则会出现错误

OSError: Unable to open file (unable to lock file, errno = 11, error message = 'Resource temporarily unavailable')

During handling of the above exception, another exception occurred:

OSError: Unable to create file (unable to open file: name = 'test.hdf5', errno = 17, error message = 'File exists', flags = 15, o_flags = c2)

我想通过检查文件是否已经以写模式打开来解决这个问题,如果是,稍等一下再检查,直到它不再以写模式打开。我还没有发现 h5pyhdf5 有任何此类检查功能。截至目前,我的解决方案基于此:

from time import sleep
import h5py

# Function handling the intelligent hdf5 file opening
def open_hdf5(filename, *args, **kwargs):
while True:
try:
hdf5_file = h5py.File(filename, *args, **kwargs)
break # Success!
except OSError:
sleep(5) # Wait a bit
return hdf5_file

# How to use the function
with open_hdf5(filename, mode='a') as hdf5_file:
# Do stuff
...

我不确定我是否喜欢这个,因为它看起来不太温和。有没有更好的方法来做到这一点?我在 try 中打开文件的错误尝试是否有任何变化会以某种方式破坏其他进程中正在进行的写入进程?

最佳答案

通过快速研究判断,没有独立于平台的方法来检查文件是否已经处于打开写入模式。 How to check whether a file is_open and the open_status in python https://bytes.com/topic/python/answers/612924-how-check-whether-file-open-not

但是,由于您已经定义了一个用于读写 hdf5 文件的包装器打开读/写方法,因此当您有一个成功打开 hdf5 文件的进程时,您总是可以创建一个“file_name”.lock 文件.

然后您所要做的就是使用 os.path.exists('"file_name".lock') 来了解您是否可以在写入模式下打开文件。

从本质上讲,您所做的并没有太大的不同。然而,首先您可以查看您的文件系统以查看您的进程是否以写入模式访问该文件,其次测试不是异常的产物,因为 os.path.exists 将返回一个 bool 值。

许多应用程序都使用这种技巧。在 CVS 存储库中漫游时,您经常会看到 .lock 文件散布在...

关于python - 使用 h5py 以写入模式打开已打开的 hdf5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49438814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com