コード例 #1
0
 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)
コード例 #2
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)
コード例 #3
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