在python 2中,我使用:
is_locked = rlock._RLock__count > 0
这是因为RLock
没有给我常规Lock
对象具有的功能,即locked()
方法。
在python 3中,即使私有变量_RLock__count
也不存在。
答案 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()