У меня есть сетевой диск (Z:\), который используется несколькими компьютерами Windows. Можно ли реализовать межмашинную блокировку, просто создав/удалив файлы на этом сетевом диске?
Например, два компьютера, A и B, хотят одновременно выполнить запись в общий ресурс с идентификатором 123.
Один из компьютеров, скажем A, сначала блокирует ресурс, создавая пустой файл Z:\locks\123. Когда 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)
Это не сработает, потому что может быть более одного процесса, выходящего из состояния ожидания и одновременно создающего файл блокировки.
Итак, еще раз, вопрос : возможно ли реализовать механизм межмашинной блокировки на общем хранилище?