複数のWindowsコンピューターで共有されているネットワークドライブ(Z:\)があります。このネットワークドライブでファイルを作成/削除するだけでクロスマシンロックを実装することは可能ですか?
たとえば、2台のコンピューターAとBが、同時にIDが123の共有リソースに書き込みたいとします。
コンピュータの1つ、たとえばAは、空のファイルZ:\ locks \ 123を作成することにより、最初にリソースをロックします。Bは、「123」という名前のロックファイルがあることを確認すると、リソース123が他の誰かによって使用されていることを認識しているため、AがZ:\ locks \ 123を削除してから、資源。
マルチスレッドのクリティカルセクションのようなものですが、複数のマシンで実行したいと思います。
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)
複数のプロセスが待機状態を終了し、同時にロックファイルを作成する可能性があるため、これは機能しません。
繰り返しになりますが、問題は次のとおりです。共有ストレージにクロスマシンロックメカニズムを実装することは可能ですか?