""" Interprocess mutex based on file locks """ import fcntl import os class Lock: def __init__(self, filename): self.filename = filename # This will create it if it does not exist already unbuffered = 0 self.handle = open(filename, 'a+', unbuffered) def acquire(self): fcntl.flock(self.handle, fcntl.LOCK_EX) # will throw IOError if unavailable def try_acquire(self): fcntl.flock(self.handle, fcntl.LOCK_NB | fcntl.LOCK_EX) def release(self): fcntl.flock(self.handle, fcntl.LOCK_UN) def __del__(self): self.handle.close()