Python 对可能被threading.Lock锁定的项目使用random.choice

Python 对可能被threading.Lock锁定的项目使用random.choice,python,multithreading,random,Python,Multithreading,Random,我正在开发一个搜索树代理,它能够使用多线程来增长节点。 每个节点都有以下功能: import threading def __init__(self, move=None, parent=None): self.lock = threading.Lock() self.lock.acquire() self.move = move self.parent = parent self.N = 0 self.Q = 0 self.children = {}

我正在开发一个搜索树代理,它能够使用多线程来增长节点。
每个节点都有以下功能:

import threading
def __init__(self, move=None, parent=None):    
  self.lock = threading.Lock()
  self.lock.acquire()
  self.move = move
  self.parent = parent
  self.N = 0  
  self.Q = 0
  self.children = {}
  self.lock.release()
正如您所看到的,每当初始化节点时,它都会被锁定,以避免节点可能重复。
在我的代码的某个地方,我将父节点的所有节点放在一个列表中,然后随机选择:

max_nodes = [n for n in node.children.values()]
node = random.choice(max_nodes)
如果在创建max_节点列表的过程中,某个节点被锁定(节点可能会不时被锁定),那么随机选择会发生什么情况。
它是否等待释放所有节点?
我问这个问题是因为我多次遇到这个错误:

无法从空列表中选择

您可能误解了锁类型的工作原理。如果直接访问“children”实例变量,则根本不涉及锁。错误最可能的原因是“children”dict是空的。在使用它的同一个函数中实例化
锁是错误的。你必须在
\uuuu main\uuuu
线程中执行。我只是想知道随机函数是否等待所有节点释放?主程序太大了,我不能把它放在这里。