FIFO队列在队列分别为满或空时,会在其enqueue
和dequeue
函数中暂停。如果只有一个队列,这不是问题。
我的情况是有两个队列,我需要根据以下条件进行入队操作:
run_options = tf.RunOptions(timeout_in_ms=10000)i1, l1, i2, l2 = produce_sample()if l1 == l2: sess.run(enqueue_same_op, feed_dict={x1: i1, y1: l1, x2: i2, y2: l2}, \ options=run_options)else: sess.run(enqueue_diff_op, feed_dict={x1: i1, y1: l1, x2: i2, y2: l2})
enqueue_same_op
和enqueue_diff_op
分别是queue_same
和queue_diff
的操作。
由于l1<>l2
的概率远大于l1==l2
,因此即使我采用了run_options
,会话也会在queue_diff
的入队操作上暂停。
有没有办法获取队列的大小,或者测试队列是否已满?
非常感谢您的帮助。
回答:
有没有办法获取队列的大小,或者测试队列是否已满?
您可以使用size()
函数来设置队列的大小,并与队列容量进行比较
capacity=1000 # 您的队列容量dtype=tf.float32queue_diff = tf.FIFOQueue(capacity, dtype)enqueue_op = tf.cond(tf.equal(queue_diff.size(), capacity), lambda:is_full(), lambda: enqueue(queue_diff, enqueue_elements..))# 当队列已满时处理的函数def is_full(): return 'Enqueue_Failed'# 入队操作的函数def enqueue(queue, element...): queue.enqueue(element) return 'Enqueue_Success'