如何检查python 3中的RLock是否被任何线程获取

时间:2016-04-04 14:27:59

标签: python python-3.x

在python 2中,我使用:

is_locked = rlock._RLock__count > 0

这是因为RLock没有给我常规Lock对象具有的功能,即locked()方法。 在python 3中,即使私有变量_RLock__count也不存在。

2 个答案:

答案 0 :(得分:1)

您可能会考虑尝试以非阻塞模式获取锁定,然后在获取时释放锁定,这样做是合适的。以下示例说明了如何完成此操作:

 var myTabs = tabs({
el: '#tabs',
tabNavigationLinks: '.c-tabs-nav__link',
tabContentContainers: '.c-tab'

答案 1 :(得分:1)

问题似乎是__count实例属性在迁移到新版本的Python时被重命名为_count。为了提供简单的API,我们设计了CustomRLock类,并在下面的示例中进行了演示。它应该允许您查明是否已被任何线程(包括当前线程)获取锁。

import random
import threading


def main():
    lock = CustomRLock()
    if random.randrange(2):
        lock.acquire()
    print('Lock was', end='')
    if not lock.acquired:
        print(' not', end='')
    print(' acquired.')


class CustomRLock(threading._PyRLock):

    @property
    def acquired(self):
        return bool(self._count)


if __name__ == '__main__':
    main()