import os
class FileLock:
def __init__(self, filename):
self.filename = filename
self.fd = None
self.pid = os.getpid()
def acquire(self):
try:
self.fd = os.open(self.filename, os.O_CREAT|os.O_EXCL|os.O_RDWR)
# Only needed to let readers know who's locked the file
os.write(self.fd, "%d" % self.pid)
return 1 # return ints so this can be used in older Pythons
except OSError:
self.fd = None
return 0
def release(self):
if not self.fd:
return 0
try:
os.close(self.fd)
os.remove(self.filename)
return 1
except OSError:
return 0
def __del__(self):
self.release()
def main():
lock = FileLock("lock.file")
while 1:
if lock.acquire():
raw_input("acquired lock. Press ENTER to release:")
lock.release()
raw_input("released lock. Press ENTER to retry:")
else:
raw_input("Unable to acquire lock. Press ENTER to retry:")
if __name__ == "__main__":
main()