1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
"""
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()
|