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

PREVIOUS NEXT
Code Example
Python :: print 1to 10 number without using loop in python 
Python :: secondary y axis matplotlib 
Python :: how to open a file with python 
Python :: how to read a csv file in python 
Python :: multiclass ROC AUC curve 
Python :: pandas sep 
Python :: discord.py read embed on message 
Python :: all pdf in a directory to csv python 
Python :: python add two numbers 
Python :: python key list 
Python :: how to make a string case insensitive in python 
Python :: how to use pafy 
Python :: tkinter how to remove button boder 
Python :: django migrate not creating tables 
Python :: python dict to dataclass 
Python :: python soap 
Python :: how to count the occurrence of a word in string python 
Python :: python read text file next line 
Python :: concatenate int to string python 
Python :: python remove characters from end of string 
Python :: how to remove spaces in string in python 
Python :: python sort columns of pandas dataframe 
Python :: python file open try except error 
Python :: root mean square python signal 
Python :: scipy cosine distance 
Python :: count characters in string python 
Python :: python dataframe row count 
Python :: how to make a use of list in python to make your own length function 
Python :: python cast list to float 
Python :: Find the title of a page in python 
ADD CONTENT
Topic
Content
Source link
Name
6+5 =