複数のWindowsコンピュータで共有されているネットワークドライブ(Z:\)があります。このネットワークドライブ上のファイルを作成/削除するだけで、クロスマシンロックを実装することは可能ですか?ファイルを使用した分散ロックの実装
たとえば、2台のコンピュータAとBは、123のIDを持つ共有リソースに同時に書き込みたいとします。
空のファイルZ:\ locks \ 123を作成することによって、コンピュータの1つ、たとえばAがリソースをロックします。 Bが "123"という名前のロックファイルがあると判断した場合、Bはリソース123が他の人によって使用されていることを知っているので、Z:\ locks \ 123がAによって削除されるのを待たなければならないリソース。
マルチスレッドではクリティカルセクションと似ていますが、複数のマシンで実行したいと考えています。
私はPythonで実装しようとしています。複数のプロセスが待機状態を終了し、同時にロックファイルを作成するがあるかもしれないので、これは動作しません
import os
import time
def lock_it(lock_id):
lock_path = "Z:\\locks\\" + lock_id
while os.path.exists(lock_path):
time.sleep(5) # wait for 5 seconds
# create the lock file
lock_file = open(lock_path, "w")
lock_file.close()
def unlock_it(lock_id):
# delete the lock file
lock_path = "Z:\\locks\\" + lock_id
if os.path.exists(lock_path):
os.remove(lock_path)
:ここでは私が思いついたものです。
また、質問はです。共有ストレージにクロスマシン・ロック・メカニズムを実装することは可能ですか?
タイムアウトの追加はどうですか?すなわち、例えば60秒の時間の後、自動的にロックが解除される。ロッキング時間がこのタイムアウトを超えないと仮定します。 time.time() - os.path.getctime( "Z:\ my_lock")でロック時間を取得して、ロックが遅れていないかどうかを調べることができます。 – eliang