def try_lock(): try: my_lock = lockutils._FcntlLock(lock_file) my_lock.lockfile = open(lock_file, 'w') my_lock.trylock() my_lock.unlock() os._exit(1) except IOError: os._exit(0)
def try_lock(): lock.release() # child co-owns it before fork try: my_lock = lockutils._FcntlLock(lock_file) my_lock.lockfile = open(lock_file, 'w') my_lock.trylock() my_lock.unlock() os._exit(1) except IOError: os._exit(0)
def test_lock_acquire_release_file_lock(self): lock_dir = tempfile.mkdtemp() lock_file = os.path.join(lock_dir, 'lock') lock = lockutils._FcntlLock(lock_file) def try_lock(): lock.release() # child co-owns it before fork try: my_lock = lockutils._FcntlLock(lock_file) my_lock.lockfile = open(lock_file, 'w') my_lock.trylock() my_lock.unlock() os._exit(1) except IOError: os._exit(0) def attempt_acquire(count): children = [] for i in range(count): child = multiprocessing.Process(target=try_lock) child.start() children.append(child) exit_codes = [] for child in children: child.join() exit_codes.append(child.exitcode) return sum(exit_codes) self.assertTrue(lock.acquire()) try: acquired_children = attempt_acquire(10) self.assertEqual(0, acquired_children) finally: lock.release() try: acquired_children = attempt_acquire(5) self.assertNotEqual(0, acquired_children) finally: try: shutil.rmtree(lock_dir) except IOError: pass