Opening already opened hdf5 file in write mode, using h5py
我同时运行同一个python程序作为不同的进程,这些进程都希望使用
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)
我想通过检查文件是否已经在写模式下打开来解决这个问题,如果已经打开了,请稍等,然后再次检查,直到它不再在写模式下打开。我没有发现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 ... |
我不确定我是否喜欢这个,因为它看起来不太温和。有没有更好的办法?如果我错误地试图在
通过快速研究判断,没有平台独立的方法来检查文件是否已经是开放写模式。如何在python中检查文件是否打开以及打开状态https://bytes.com/topic/python/answers/612924-how-check-if-file-open-not
但是,由于您已经定义了一个包装打开读/写方法来读写您的HDF5文件,当您有一个成功打开HDF5文件的进程时,您总是可以创建一个"文件名".lock文件。
然后你要做的就是使用os.path.exists(""file_name.lock")来知道你是否可以在写模式下打开文件。
从本质上来说,这和你所做的没有什么不同。但是,首先,您可以查看文件系统以查看某个进程是否以写模式访问该文件;其次,测试不是异常的产物,因为os.path.exists将返回布尔值。
许多应用程序使用这种技巧。当漫游通过cvs repo时,您经常看到.lock文件在周围…