首页 > 解决方案 > 在 python3 中运行“import tensorflow”会发生什么?

问题描述

我试图理解为什么我在子进程中启动时无法正确运行(最新的)TensorFlow。

父进程运行import tensorflow,但除非我做一些感觉很hacky的事情,否则后续调用sess.run(...)将挂起。

(顺便说一句,这是一个非常 hacky 的东西。目标是让 TensorFlow 在multiprocessing.Process子类中工作。通过仅在__init__ing 子类的实例和调用start(), 调用之后才导入 Tensorflow sess.run(...)。)

由于这些原因,我认为问题源于我调用import父进程。我想避免非常hacky的解决方法。当import tensorflow被调用阻止 atf.Session在子进程中工作时会发生什么?

更新:

在简化的代码中,让我描述一下到底发生了什么。

子进程挂起sess.run(...)

import tensorflow as tf

class Subprocess(multiprocessing.Process):
    def __init__(self):
        ...
        self.model = ...
        self.output = ...
        self.sess = tf.Session(...)
        self.sess.run(...)

    def run(self):
        while True:
            self.sess.run(self.output)

child = Subprocess()
child.start()

但这有效:

import tensorflow as tf

class Subprocess(multiprocessing.Process):
    def __init__(self):
        ...

    def run(self):
        self.model = ...
        self.output = ...
        self.sess = tf.Session(...)
        self.sess.run(...)
        while True:
            self.sess.run(self.output)

child = Subprocess()
child.start()

这也有效:

import tensorflow as tf

class Subprocess(multiprocessing.Process):
    def __init__(self):
        ...
        self.model = ...
        self.output = ...

    def run(self):
        self.sess = tf.Session(...)
        self.sess.run(...)
        while True:
            self.sess.run(self.output)

child = Subprocess()
child.start()

由此看来,在子进程中启动 TensorFlow 的问题与导入 TensorFlow 无关(正如许多 SO 答案所暗示的那样)。相反,问题与在不同(父)进程中创建的子进程中tf.Session使用a有关。

我有一种预感,一个tf.Session实例无法在进程之间共享,但问题仍然存在。

标签: pythonpython-3.xtensorflow

解决方案


推荐阅读