h5py バージョン 2.9.0 以降を使用している場合は、Mike's answerを参照してください。
docsによると、ファイル アクセス プロパティ リストのコピーget_access_plist()
を返します。したがって、コピーを変更してもオリジナルに影響がないことは驚くべきことではありません。
高レベル インターフェイスでは、キャッシュ設定を変更する方法が提供されていないようです。
低レベルのインターフェースを使用してそれを行う方法は次のとおりです。
propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
print(settings)
# [0, 521, 1048576, 0.75]
settings[2] *= 5
propfaid.set_cache(*settings)
settings = propfaid.get_cache()
print(settings)
# (0, 521, 5242880, 0.75)
上記はPropFAIDを作成します。次に、ファイルを開き、次の方法でFileIDを取得できます。
import contextlib
with contextlib.closing(h5py.h5f.open(
filename, flags=h5py.h5f.ACC_RDWR, fapl=propfaid)) as fid:
# <h5py.h5f.FileID object at 0x9abc694>
settings = list(fid.get_access_plist().get_cache())
print(settings)
# [0, 521, 5242880, 0.75]
そして、に渡すことで、 を使用fid
して、高レベル インターフェイスでファイルを開くことができます。fid
h5py.File
f = h5py.File(fid)
print(f.id.get_access_plist().get_cache())
# (0, 521, 5242880, 0.75)
したがって、高レベルのインターフェイスを引き続き使用できますが、そこに到達するには多少の手間がかかります。一方、本質的なものだけに絞り込むと、おそらくそれほど悪くはありません。
import h5py
import contextlib
filename = '/tmp/foo.hdf5'
propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
settings[2] *= 5
propfaid.set_cache(*settings)
with contextlib.closing(h5py.h5f.open(filename, fapl=propfaid)) as fid:
f = h5py.File(fid)