2012-01-11 2 views
1

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

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

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

ответ

1

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

+0

нет, syscalls просто отлично :) – viraptor

0

Обычно я использую попытку ... наконец, блок, чтобы освободить замок. , например.

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

Вы можете попробовать 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 способ.

Смежные вопросы