TensorFlow中,队列不仅是一种数据结构,还是异步计算张量取值的一个重要机制。
TensorFlow提供了tf.Coordinator和tf.QueueRunner两个类来完成多线程协同的功能。以下代码用来简单的展示两者一起使用的示例。
import tensorflow as tf
# 先申明队列
queue = tf.FIFOQueue(100, "float")
# 定义队列的入队操作
enqueue_op = queue.enqueue([tf.random_normal([1])])
# 创建多个线程来运行入队操作
# def __init__(self, queue=None, enqueue_ops=None, close_op=None,
# cancel_op=None, queue_closed_exception_types=None,
# queue_runner_def=None, import_scope=None):
# 表示创建了5个线程,每个线程中运行的是enqueue_op操作
qr = tf.train.QueueRunner(queue, [enqueue_op] * 5)
# 加入到TensorFlow的计算图中 使用TensorFlow的默认计算图
# def add_queue_runner(qr, collection=ops.GraphKeys.QUEUE_RUNNERS):
tf.train.add_queue_runner(qr)
# 定义出队操作
out_tensor = queue.dequeue()
with tf.Session() as sess:
# 使用tf.train.Coordinator来协同启动线程
coord = tf.train.Coordinator()