Welcome, guest | Sign In | My Account | Store | Cart
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
()

History