| """A primitive, file-based synchronization utility.""" |
| def __init__(self, lock_file_path, wait_seconds=0.1): |
| Create a new :class:`FileBaton`. |
| lock_file_path: The path to the file used for locking. |
| wait_seconds: The seconds to periodically sleep (spin) when |
| self.lock_file_path = lock_file_path |
| self.wait_seconds = wait_seconds |
| Try to atomically create a file under exclusive access. |
| True if the file could be created, else False. |
| self.fd = os.open(self.lock_file_path, os.O_CREAT | os.O_EXCL) |
| Periodically sleeps for a certain amount until the baton is released. |
| The amount of time slept depends on the ``wait_seconds`` parameter |
| passed to the constructor. |
| while os.path.exists(self.lock_file_path): |
| time.sleep(self.wait_seconds) |
| """Release the baton and removes its file.""" |
| os.remove(self.lock_file_path) |