我阅读了Supervisor :: prepare_or_wait_for_session的源代码,对于非首席工作人员,它应该调用wait_for_session以获取会话是否准备就绪:
sess = self._session_manager.wait_for_session(
master, config=config, max_wait_secs=max_wait_secs)
Superviser中有一个名为self._ready_op的成员,其初始化为USE_DEFAULT = 0。
在“ wait_for_session”内部,它将检查是否为model_ready
while True:
sess = session.Session(self._target, graph=self._graph, config=config)
not_ready_msg = None
not_ready_local_msg = None
local_init_success, not_ready_local_msg = self._try_run_local_init_op(
sess)
if local_init_success:
# Successful if local_init_op is None, or ready_for_local_init_op passes
is_ready, not_ready_msg = self._model_ready(sess)
if is_ready:
return sess
在“模型就绪”内部:
def _ready(op, sess, msg):
if op is None:
return True, None
....
我的问题是,因为model_ready将使用“ self._ready_op”进行检查,如果它为None,它将直接返回True,并且似乎没有等待时间。
我检查了两次,但是除了Supervisor构造函数外,没有找到self._ready_op的初始化位置,但是,正常情况下不会在Supervisor的构造中设置ready_op,因此我对“ wait_for_session”的分布式逻辑感到困惑,正如其功能所描述的那样,它应该等待首席工作人员准备好模型。