Search
 
SCRIPT & CODE EXAMPLE
 

PYTHON

python lock using a file

from filelock import FileLock

with FileLock("myfile.txt.lock"):
    print("Lock acquired.")
    with open("myfile.txt"):
        # work with the file as it is now locked
Comment

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 :: image data generator tensorflow 
Python :: python projects 
Python :: convert all sizes to terabytes pandas 
Python :: python use getcontext 
Python :: authentication serializer drf 
Python :: pandas make currency with commas 
Python :: python linear interpolation 
Python :: pandas index append value 
Python :: python change label text 
Python :: golang get started 
Python :: numpy unique axis 
Python :: .unique() python 
Python :: loop through dataframe rows python 
Python :: jupyter read excel 
Python :: Uninstalling/removing a package is very easy with pip: 
Python :: The options auto_now, auto_now_add, and defa ult are mutually exclusive. Only one of these options may be present. 
Python :: python catch int conversion error 
Python :: extract images from pdf 
Python :: plt.scatter background color 
Python :: dataclass in python 
Python :: Python NumPy insert Function Syntax 
Python :: import one file into another python 
Python :: calendar library in python 
Python :: pandas sum group by 
Python :: explicitly free memory in Python code 
Python :: python ceil method 
Python :: mixpanel export api 
Python :: from random input python 
Python :: remove emoji 
Python :: set time complexity python 
ADD CONTENT
Topic
Content
Source link
Name
5+4 =