tensorflow / C ++:何时(不)调用Session.Close()?

时间:2017-07-03 19:34:18

标签: tensorflow

查看Session的定义,我看到its destructor is empty,特别是它不会调用Close()。这意味着我们需要在对象被销毁之前手动调用此函数。

我想知道为什么会这样。如果每次在对象被销毁之前需要调用此函数,我想它会被添加到析构函数中以避免潜在的泄漏。因此,我认为有些情况下不应该调用Close(),但它们是什么?

另一种提出相同问题的方法是,如果我将Session包裹在一个会在销毁时调用Close()的对象中,我会遇到什么问题。

1 个答案:

答案 0 :(得分:1)

Close的存在允许将错误信息返回给调用者。

Session是一个具有多个实现的接口。特别是,当使用分布式设置(例如在grpc_session.cc中)Close时,将尝试清理其他进程中的资源。 Close的返回值提供了被告知并对任何失败采取行动的机会。 (FWIW,当不使用分布式设置时,通常使用direct_session.cc中的实现,并且永远不会返回错误)。这也意味着Close可能很昂贵(例如,阻止直到请求通过网络发送并收到响应),这可能不是您在某些情况下要等待的事情(例如,关闭应用程序时)

如果您的应用程序不能对此类失败采取行动,那么我不相信编写一个Close()关于破坏的包装器会话将是一个问题。

希望有所帮助。