Tensorflow:将会话传递给python多进程

Tensorflow:将会话传递给python多进程,python,python-2.7,python-multiprocessing,tensorflow,Python,Python 2.7,Python Multiprocessing,Tensorflow,我正在使用tensorflow对一些大图像进行预处理。我遇到了一个记忆迅速崩溃的问题。我转而在python中使用多处理,以便在需要时完全释放内存 问题是,我正在使用python的多进程队列,由于未知的原因,我无法将tensorflow会话从父进程传递给子进程。使用一些高级调试技术(即每隔几行打印一次),我注意到python只是在我使用会话的行中空闲,它不会抛出错误消息 我的代码如下所示: def subprocess(some_image, sess, q): with sess.as_

我正在使用tensorflow对一些大图像进行预处理。我遇到了一个记忆迅速崩溃的问题。我转而在python中使用多处理,以便在需要时完全释放内存

问题是,我正在使用python的多进程队列,由于未知的原因,我无法将tensorflow会话从父进程传递给子进程。使用一些高级调试技术(即每隔几行打印一次),我注意到python只是在我使用会话的行中空闲,它不会抛出错误消息

我的代码如下所示:

def subprocess(some_image, sess, q):
    with sess.as_default():
        # ... use sess and q ...
        print "All good and well" #This is printed
        some_image.eval() #Nothing happens here in console
        print "Still all good and well" #This is not printed

if __name__ == '__main__':
    # ... some initial operations ...
    some_image = read_some_image()

    sess = tf.Session()

    q = Queue()
    q.put(something)
    p = Process(target=subprocess, args=(some_image, sess, q))
    p.start()
    p.join()
有什么问题吗?
非常感谢

我认为您不能像在
tf.Session()中那样在这样的进程之间共享。

我认为每个进程都需要它自己的会话。

您所需要的就是分布式tensorflow

  • 在父进程中创建图形和会话。在构造图形时,将一些运算符(尤其是变量)放置到worker
  • 创建子进程并运行它们

  • 乍一看似乎是这样。我的脚本运行得很慢,我不确定创建tensorflow会话是否经常影响性能。那么,您不使用多处理池功能吗?我将尝试一下!事实上,我是这方面的新手。你不能像那样共享会话。您必须转储图形并在新会话中重新加载它。您是否知道如何与多处理程序包并行运行多个会话?如果我没有记错,我可以使用多处理池执行您想要的操作。我想要的是在多个函数调用之间共享一个会话,但我无法做到这一点。最后,我选择了其他方法来保持低内存使用率。我意识到这已经很旧了,但我正在处理一个类似的问题@mathetes您说过您可以通过多处理池将会话从父进程传递到其他子进程?抱歉@cmed123我不再记得细节了。我只记得,最后我并没有在这方面走得更远,而是找到了其他优化性能的方法。这个答案不清楚,没有给出具体的方法。我甚至不认为这是一个答案。