| """ | 
 | 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() |