在python3中运行“ import tensorflow”会发生什么?

时间:2018-08-13 21:05:53

标签: python python-3.x tensorflow

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

父进程运行import tensorflow,但是除非我做一些令人不快的操作,否则后续对sess.run(...)的调用将挂起。

(顺便说一句,这是非常棘手的事情。目标是使TensorFlow在multiprocessing.Process子类中工作。仅在__init__子类实例和调用start(),然后调用sess.run(...)。)

由于这些原因,我认为问题出在我在父进程中致电import。我想避免非常棘手的解决方法。当调用import tensorflow阻止tf.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答案所建议的)。相反,问题与在不同(父)进程中创建的 child 进程中使用tf.Session有关。

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

0 个答案:

没有答案