我试图理解为什么在子进程中启动并使用TensorFlow时无法正确运行(最新的)TensorFlow。
父进程运行
import tensorflow
,但除非我做了一些让人感觉很不舒服的事情,否则接下来的电话
sess.run(...)
会被吊死的。
multiprocessing.Process
子类。只在两者之后导入Tensorflow
__init__
调用子类的实例并调用
start()
,呼叫
sess.run(...)
基于这些原因,我认为问题源于我打电话
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无关(正如许多答案所暗示的那样)。相反,问题与使用
tf.Session
小孩
在中创建的进程
不同的
我有预感
tf.Session