Tensorflow:使用py_func时多线程enqueue_op

时间:2017-07-17 16:42:11

标签: python multithreading tensorflow io queue

所以直到最近,我才给我的模型提供一个FIFOQueue,它使用py_func变量排队。这种奇怪选择的原因是我动态生成训练数据,除了调用python函数生成这些数据之外别无选择。

这一切都很顺利,但我发现自己受到数据生成速度的限制。我已经优化了数据生成算法,所以我现在想要启动几个排队线程。

问题是:我获得了非常奇怪和随机的错误。有时候它可能是一个SegmentationFault,有时它可以工作,直到没有任何东西被排队(我怀疑死锁)......

以下是我的工作内容:

def generate_example():
    ...
example = tf.py_func(generate_example, inp=[], Tout=...)    
enqueue_op = queue.enqueue(example)
qr = tf.train.QueueRunner(queue, [enqueue_op] * 4)
tf.train.add_queue_runner(qr)

请注意,我尝试过对此代码的疯狂变体(定义了几个不同的example变量,导致不同的enqueue_ops ...,定义了不同的generate_example函数... )。

根据我的理解,由于Python不能很好地处理多线程,所以这不太可行。但是,也许你们知道了解决方法吗?

谢谢!

0 个答案:

没有答案