Search
 
SCRIPT & CODE EXAMPLE
 

PYTHON

python lock file

import os
import time
import errno
 
class FileLockException(Exception):
    pass
 
class FileLock(object):
    """ A file locking mechanism that has context-manager support so 
        you can use it in a with statement. This should be relatively cross
        compatible as it doesn't rely on msvcrt or fcntl for the locking.
    """
 
    def __init__(self, file_name, timeout=10, delay=.05):
        """ Prepare the file locker. Specify the file to lock and optionally
            the maximum timeout and the delay between each attempt to lock.
        """
        if timeout is not None and delay is None:
            raise ValueError("If timeout is not None, then delay must not be None.")
        self.is_locked = False
        self.lockfile = os.path.join(os.getcwd(), "%s.lock" % file_name)
        self.file_name = file_name
        self.timeout = timeout
        self.delay = delay
 
 
    def acquire(self):
        """ Acquire the lock, if possible. If the lock is in use, it check again
            every `wait` seconds. It does this until it either gets the lock or
            exceeds `timeout` number of seconds, in which case it throws 
            an exception.
        """
        start_time = time.time()
        while True:
            try:
                self.fd = os.open(self.lockfile, os.O_CREAT|os.O_EXCL|os.O_RDWR)
                self.is_locked = True #moved to ensure tag only when locked
                break;
            except OSError as e:
                if e.errno != errno.EEXIST:
                    raise
                if self.timeout is None:
                    raise FileLockException("Could not acquire lock on {}".format(self.file_name))
                if (time.time() - start_time) >= self.timeout:
                    raise FileLockException("Timeout occured.")
                time.sleep(self.delay)
#        self.is_locked = True
 
 
    def release(self):
        """ Get rid of the lock by deleting the lockfile. 
            When working in a `with` statement, this gets automatically 
            called at the end.
        """
        if self.is_locked:
            os.close(self.fd)
            os.unlink(self.lockfile)
            self.is_locked = False
 
 
    def __enter__(self):
        """ Activated when used in the with statement. 
            Should automatically acquire a lock to be used in the with block.
        """
        if not self.is_locked:
            self.acquire()
        return self
 
 
    def __exit__(self, type, value, traceback):
        """ Activated at the end of the with statement.
            It automatically releases the lock if it isn't locked.
        """
        if self.is_locked:
            self.release()
 
 
    def __del__(self):
        """ Make sure that the FileLock instance doesn't leave a lockfile
            lying around.
        """
        self.release()
Comment

python lockfile

import lockfile
with lockfile.LockFile('/tmp/example.lock'):
  print('Locked')
print('Unlocked')
Comment

PREVIOUS NEXT
Code Example
Python :: how to take n space separated input in python” Code Answer’s 
Python :: python pass arguments in command line 
Python :: python ceil method 
Python :: python repr vs str 
Python :: how to handle response from tkinter messagebox.askquestion() function in Python 
Python :: foreach loop in python 
Python :: python trace table 
Python :: python date time 
Python :: how to get quarter year date in pandas 
Python :: pygame rect 
Python :: python classes and objects 
Python :: add a constant to a list python 
Python :: code example of sum of the first n odd numbers using for loop 
Python :: different types f python loops 
Python :: discord.py create button 
Python :: dictionary from two list 
Python :: How to shift non nan values up and put nan values down 
Python :: python codes for counting the occurrence of a letters in dictionary excluding digits 
Python :: defaultdict item count 
Python :: feature engineering data preprocessing 
Python :: dependency injection python 
Python :: python loop array 
Python :: model checkpoint 
Python :: python reverse dictionary 
Python :: pandas pivot tables 
Python :: nan vs nat pandas 
Python :: drop row pandas column value not a number 
Python :: linkedlist python 
Python :: python dict delete key 
Python :: replace in python 
ADD CONTENT
Topic
Content
Source link
Name
2+9 =