ラボでは、データをhdf5
ファイルにpythonパッケージh5py
]を介して保存します。
実験の最初に、hdf5
ファイルを作成し、(特に)ファイル内のデータの配列の配列の後に配列を格納します。実験が失敗または中断した場合、ファイルは正しく閉じられません。実験はiPython
から実行されるため、データオブジェクトへの参照はメモリ内に(どこかに)残ります。
開いているすべてのh5pyデータオブジェクトをスキャンして閉じる方法はありますか?
これはそれを行う方法です(例外なくファイルのクローズ状態を確認する方法を理解できませんでした、おそらくあなたは見つけるでしょう):
import gc
for obj in gc.get_objects(): # Browse through ALL objects
if isinstance(obj, h5py.File): # Just HDF5 files
try:
obj.close()
except:
pass # Was already closed
別のアイデア:
依存howファイルの使用方法、コンテキストマネージャとwith
キーワードの使用についてはどうですか?
with h5py.File("some_path.h5") as f:
f["data1"] = some_data
プログラムフローがwithブロックを終了すると、例外など、何が発生してもファイルは閉じられます。
pytables
(h5py
が使用)は、開いているすべてのファイルを追跡し、開いているすべてのhdf5
ファイルを強制的に閉じる簡単な方法を提供します。
import tables
tables.file._open_files.close_all()
その属性_open_files
には、開いているファイルの情報とハンドラーを提供するための便利なメソッドもあります。
HFile .bool()が開いている場合はTrueを返し、そうでない場合はFalseを返すことがわかりました。これは、確認する最も簡単な方法かもしれません。つまり、次のようにします。
hFile = h5py.File(path_to_file)
if hFile.__bool__():
hFile.close()