[私は無題のタイトルをお詫び申し上げます。私はもっと良いものを考え出すことができませんでした。より良いタイトルのための提案は大歓迎です。]クラスにwith文のような機能を与えるには?
HDF5ファイルロックを使用してマルチプロセスレベルの同時実行をサポートするファイルへのインターフェイスを実装したいと思います。このモジュールの意図する環境は、NFSを介して共有ディスクにアクセスするLinuxクラスタです。目標は、複数の異なるホスト上で実行されている複数の並列プロセスによって、同じファイルへの同時アクセス(NFS経由)を可能にすることです。
h5py.File
クラスのラッパークラスを使用してロック機能を実装したいと考えています。 (h5py
はすでにスレッドレベルの同時実行をサポートを提供していますが、根本的なHDF5ライブラリはスレッドセーフではありません。)私は精神こので何かを行うことができれば
はそれは素晴らしいことだ:
class LockedH5File(object):
def __init__(self, path, ...):
...
with h5py.File(path, 'r+') as h5handle:
fcntl.flock(fcntl.LOCK_EX)
yield h5handle
# (method returns)
私は上記のコードが間違っていることを認識していますが、主な考え方を伝えることを願っています。つまり、式LockedH5File('/path/to/file')
をクライアントコードにオープンハンドルで渡して、さまざまな読み書き操作を実行できます。このハンドルが有効範囲外になると、デストラクタはハンドルを閉じ、ロックを解除します。
この構成に動機を与える目的は二つある。その後、クライアントによって(ハンドルに要求された事業から
デカップルハンドルの作成(ライブラリコードによります)コード)、および
ハンドルが閉じられていることを確認し、ロック解除、どんなに介在コードの 実行中に何が起こるか(例えば、例外、未処理の 信号、Pythonの内部エラー)。
この影響をPythonでどのように達成できますか?
ありがとうございます!