Блокировки Python, которые исчезают, когда процесс умирает - PullRequest
1 голос
/ 11 января 2012

Есть ли какой-либо интерфейс блокировки для Python, который автоматически снимает блокировку, когда процесс умирает?У меня сложилось впечатление, что sysv ipc допускает это, но я все еще пытаюсь выяснить детали.

Что я ожидаю от интерфейса:

  • функции блокировки / разблокировки
  • работа между различными процессами в Linux
  • автоматическая разблокировка, когда процесс, удерживающий блокировку, умирает
  • принудительное снятие блокировки по таймауту (не обязательно)

Ответы [ 3 ]

1 голос
/ 11 января 2012

Вы можете применить блокировки к файлу, используя fcntl.lockf или fcntl.flock.Кажется, это соответствует всем вашим критериям.Или вам нужно что-то, что не требует системного вызова каждый раз, когда вы хотите заблокировать или разблокировать?

0 голосов
/ 11 января 2012

Вы можете попробовать объекты Lock во встроенном пакете multiprocessing.Я не уверен, будет ли блокировка автоматически разблокироваться при сборке мусора, но вы всегда можете создать подкласс multiprocessing.Process, например:

class MyProc(multiprocessing.Process):
    def __init__(self):
        self.ipc_lock = multiprocessing.Lock()
        # ...
        return
    def __del__(self):
        self.ipc_lock.release()
        return

, если вам нужно разблокировать, если сработало исключение, затем поставьтечто в (переопределенном) run методе.

0 голосов
/ 11 января 2012

Я обычно использую блок try ... finally, чтобы снять блокировку.например,

try:
    #do stuff
except Exception:
    pass
finally:
    #release lock
...