Python Tensorflow:是否可以打印会话数?

Python Tensorflow:是否可以打印会话数?,python,tensorflow,Python,Tensorflow,tensorflow中是否可以有多个会话?是否可以在tensorflow中打印会话数 def test_print_number_of_sessions(): sess1 = tf.Session() sess2 = tf.Session() //print_number_of_sessions 每个图可以有多个会话,但无法直接获取图中所有打开的会话。图的内部C数据结构确实有,但不幸的是,其中的Python计数器部分(tf.graph对象的\u C\u graph属性

tensorflow中是否可以有多个会话?是否可以在tensorflow中打印会话数

def test_print_number_of_sessions():
    sess1 = tf.Session()
    sess2 = tf.Session()

    //print_number_of_sessions

每个图可以有多个会话,但无法直接获取图中所有打开的会话。图的内部C数据结构确实有,但不幸的是,其中的Python计数器部分(tf.graph对象的
\u C\u graph
属性)只是一个不透明的指针,没有类型信息

一种可能的解决方案是使用您自己的会话包装器来跟踪每个图中打开的会话。这是一种可能的方法

import tensorflow as tf
import collections

class TrackedSession(tf.Session):
    _sessions = collections.defaultdict(list)
    def __init__(self, target='', graph=None, config=None):
        super(tf.Session, self).__init__(target=target, graph=graph, config=config)
        TrackedSession._sessions[self.graph].append(self)
    def close(self):
        super(tf.Session, self).close()
        TrackedSession._sessions[self.graph].remove(self)
    @classmethod
    def get_open_sessions(cls, g=None):
        g = g or tf.get_default_graph()
        return list(cls._sessions[g])

print(TrackedSession.get_open_sessions())
# []
sess1 = TrackedSession()
print(TrackedSession.get_open_sessions())
# [<__main__.TrackedSession object at 0x000001D75B0C77F0>]
sess2 = TrackedSession()
print(TrackedSession.get_open_sessions())
# [<__main__.TrackedSession object at 0x000001D75B0C77F0>, <__main__.TrackedSession object at 0x000001D75B0C7A58>]
sess1.close()
print(TrackedSession.get_open_sessions())
# [<__main__.TrackedSession object at 0x000001D75B0C7A58>]
sess2.close()
print(TrackedSession.get_open_sessions())
# []
将tensorflow导入为tf
导入集合
类跟踪会话(tf.Session):
_sessions=collections.defaultdict(列表)
定义初始化(self,target='',graph=None,config=None):
super(tf.Session,self)。\uuuuu init\uuuuuu(目标=目标,图形=图形,配置=配置)
TrackedSession.\u sessions[self.graph].append(self)
def关闭(自我):
super(tf.Session,self.close())
TrackedSession.\u sessions[self.graph].删除(self)
@类方法
def get_open_会话(cls,g=None):
g=g或tf.get_default_graph()
返回列表(cls.\U会话[g])
打印(TrackedSession.get_open_sessions())
# []
sess1=TrackedSession()
打印(TrackedSession.get_open_sessions())
# []
sess2=TrackedSession()
打印(TrackedSession.get_open_sessions())
# [, ]
sess1.close()
打印(TrackedSession.get_open_sessions())
# []
sess2.close()
打印(TrackedSession.get_open_sessions())
# []
但是,这限制了您使用此自定义会话类型,这可能不够好,具体取决于场景(例如,如果会话是由某些外部代码打开的,例如,当您使用Keras时)。

这可能是好的:

tf.InteractiveSession._active_session_count

看到这个欢迎StackOverflow。请解释你的代码,这样我们就可以看到你在那里做了什么,以及为什么它“可能是好的”。