queue_runner_test.py revision ea6b59a5c4aa0147cc7e333da95234464b21cf6f
19c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# Copyright 2015 Google Inc. All Rights Reserved. 29c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# 39c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# Licensed under the Apache License, Version 2.0 (the "License"); 49c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# you may not use this file except in compliance with the License. 59c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# You may obtain a copy of the License at 69c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# 79c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# http://www.apache.org/licenses/LICENSE-2.0 89c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# 99c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# Unless required by applicable law or agreed to in writing, software 109c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# distributed under the License is distributed on an "AS IS" BASIS, 119c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# See the License for the specific language governing permissions and 139c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# limitations under the License. 149c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# ============================================================================== 159c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur 16f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur"""Tests for QueueRunner.""" 17f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevanfrom __future__ import absolute_import 18f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevanfrom __future__ import division 19f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevanfrom __future__ import print_function 20f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevan 21f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurimport time 22f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 23f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurimport tensorflow as tf 24f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 25f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 26f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurclass QueueRunnerTest(tf.test.TestCase): 27f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 28f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testBasic(self): 29f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 30f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 31f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur zero64 = tf.constant(0, dtype=tf.int64) 32f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur var = tf.Variable(zero64) 33f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur count_up_to = var.count_up_to(3) 34f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 35f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.initialize_all_variables().run() 36f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, [count_up_to]) 37f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess) 38f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 39f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.start() 40f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 41f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.join() 42f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(0, len(qr.exceptions_raised)) 43f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # The variable should be 3. 44f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(3, var.eval()) 45f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 46f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testTwoOps(self): 47f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 48f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 49f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur zero64 = tf.constant(0, dtype=tf.int64) 50f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur var0 = tf.Variable(zero64) 51f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur count_up_to_3 = var0.count_up_to(3) 52f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur var1 = tf.Variable(zero64) 53f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur count_up_to_30 = var1.count_up_to(30) 54f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 55f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, [count_up_to_3, count_up_to_30]) 56f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess) 57f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.initialize_all_variables().run() 58f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 59f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.start() 60f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 61f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.join() 62f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(0, len(qr.exceptions_raised)) 63f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(3, var0.eval()) 64f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(30, var1.eval()) 65f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 66f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testExceptionsCaptured(self): 67f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 68f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 69f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, ["i fail", "so fail"]) 70f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess) 71f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.initialize_all_variables().run() 72f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 73f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.start() 74f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 75f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.join() 76f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur exceptions = qr.exceptions_raised 77f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(2, len(exceptions)) 78f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertTrue("Operation not in the graph" in str(exceptions[0])) 79f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertTrue("Operation not in the graph" in str(exceptions[1])) 80f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 81f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testRealDequeueEnqueue(self): 82f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 83f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur q0 = tf.FIFOQueue(3, tf.float32) 84f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur enqueue0 = q0.enqueue((10.0,)) 85f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur close0 = q0.close() 86f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur q1 = tf.FIFOQueue(30, tf.float32) 87f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur enqueue1 = q1.enqueue((q0.dequeue(),)) 88f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur dequeue1 = q1.dequeue() 89f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(q1, [enqueue1]) 90f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess) 91f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 92f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.start() 93f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # Enqueue 2 values, then close queue0. 94f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur enqueue0.run() 95f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur enqueue0.run() 96f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur close0.run() 97f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # Wait for the queue runner to terminate. 98f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 99f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.join() 100f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # It should have terminated cleanly. 101f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(0, len(qr.exceptions_raised)) 102f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # The 2 values should be in queue1. 103f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(10.0, dequeue1.eval()) 104f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(10.0, dequeue1.eval()) 105f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # And queue1 should now be closed. 106f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.assertRaisesRegexp(tf.errors.OutOfRangeError, "is closed"): 107f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur dequeue1.eval() 108f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 109f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testRespectCoordShouldStop(self): 110f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 111f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 112f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur zero64 = tf.constant(0, dtype=tf.int64) 113f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur var = tf.Variable(zero64) 114f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur count_up_to = var.count_up_to(3) 115f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 116f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.initialize_all_variables().run() 117f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, [count_up_to]) 118f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # As the coordinator to stop. The queue runner should 119f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # finish immediately. 120f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord = tf.train.Coordinator() 121f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.request_stop() 122f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess, coord) 123f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 124f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.start() 125f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.join(threads) 126f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(0, len(qr.exceptions_raised)) 127f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # The variable should be 0. 128f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(0, var.eval()) 129f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 130f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testRequestStopOnException(self): 131f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 132f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 133f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, ["not an op"]) 134f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord = tf.train.Coordinator() 135f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess, coord) 136f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 137f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.start() 138f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # The exception should be re-raised when joining. 139f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.assertRaisesRegexp(ValueError, "Operation not in the graph"): 140f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.join(threads) 141f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 142f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testGracePeriod(self): 143f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 144f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # The enqueue will quickly block. 145f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(2, tf.float32) 146f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur enqueue = queue.enqueue((10.0,)) 147f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur dequeue = queue.dequeue() 148f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, [enqueue]) 149f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord = tf.train.Coordinator() 150f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess, coord, start=True) 151f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # Dequeue one element and then request stop. 152f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur dequeue.op.run() 153f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur time.sleep(0.02) 154f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.request_stop() 155f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # We should be able to join because the RequestStop() will cause 156f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # the queue to be closed and the enqueue to terminate. 157f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.join(threads, stop_grace_period_secs=0.05) 158f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 159ea6b59a5c4aa0147cc7e333da95234464b21cf6fA. Unique TensorFlower def testIgnoreMultiStarts(self): 160f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 161f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 162f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur zero64 = tf.constant(0, dtype=tf.int64) 163f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur var = tf.Variable(zero64) 164f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur count_up_to = var.count_up_to(3) 165f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 166f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.initialize_all_variables().run() 167f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord = tf.train.Coordinator() 168f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, [count_up_to]) 169f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = [] 170f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads.extend(qr.create_threads(sess, coord=coord)) 171ea6b59a5c4aa0147cc7e333da95234464b21cf6fA. Unique TensorFlower new_threads = qr.create_threads(sess, coord=coord) 172ea6b59a5c4aa0147cc7e333da95234464b21cf6fA. Unique TensorFlower self.assertEqual([], new_threads) 173f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.request_stop() 174f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur coord.join(threads, stop_grace_period_secs=0.5) 175f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 176f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur def testThreads(self): 177f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur with self.test_session() as sess: 178f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 179f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur zero64 = tf.constant(0, dtype=tf.int64) 180f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur var = tf.Variable(zero64) 181f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur count_up_to = var.count_up_to(3) 182f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur queue = tf.FIFOQueue(10, tf.float32) 183f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.initialize_all_variables().run() 184f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur qr = tf.train.QueueRunner(queue, [count_up_to, "bad op"]) 185f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess, start=True) 186f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 187f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.join() 188f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur exceptions = qr.exceptions_raised 189f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(1, len(exceptions)) 190f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertTrue("Operation not in the graph" in str(exceptions[0])) 191f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 192f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur threads = qr.create_threads(sess, start=True) 193f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur for t in threads: 194f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur t.join() 195f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur exceptions = qr.exceptions_raised 196f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertEqual(1, len(exceptions)) 197f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur self.assertTrue("Operation not in the graph" in str(exceptions[0])) 198f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 199cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower def testName(self): 200cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower with tf.name_scope("scope"): 201cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower queue = tf.FIFOQueue(10, tf.float32, name="queue") 202cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower qr = tf.train.QueueRunner(queue, [tf.no_op()]) 203cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower self.assertEqual("scope/queue", qr.name) 204cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower tf.train.add_queue_runner(qr) 205cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower self.assertEqual(1, len(tf.get_collection(tf.GraphKeys.QUEUE_RUNNERS, 206cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower "scope"))) 207f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur 2085d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower def testStartQueueRunners(self): 2095d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 2105d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower zero64 = tf.constant(0, dtype=tf.int64) 2115d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower var = tf.Variable(zero64) 2125d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower count_up_to = var.count_up_to(3) 2135d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower queue = tf.FIFOQueue(10, tf.float32) 2145d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower init_op = tf.initialize_all_variables() 2155d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower qr = tf.train.QueueRunner(queue, [count_up_to]) 2165d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower tf.train.add_queue_runner(qr) 2175d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower with self.test_session() as sess: 2185d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower init_op.run() 2195d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower threads = tf.train.start_queue_runners(sess) 2205d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower for t in threads: 2215d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower t.join() 2225d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower self.assertEqual(0, len(qr.exceptions_raised)) 2235d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower # The variable should be 3. 2245d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower self.assertEqual(3, var.eval()) 2255d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower 2265d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower def testStartQueueRunnersNonDefaultGraph(self): 2275d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower # CountUpTo will raise OUT_OF_RANGE when it reaches the count. 2285d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower graph = tf.Graph() 2295d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower with graph.as_default(): 2305d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower zero64 = tf.constant(0, dtype=tf.int64) 2315d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower var = tf.Variable(zero64) 2325d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower count_up_to = var.count_up_to(3) 2335d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower queue = tf.FIFOQueue(10, tf.float32) 2345d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower init_op = tf.initialize_all_variables() 2355d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower qr = tf.train.QueueRunner(queue, [count_up_to]) 2365d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower tf.train.add_queue_runner(qr) 2375d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower with self.test_session(graph=graph) as sess: 2385d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower init_op.run() 2395d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower threads = tf.train.start_queue_runners(sess) 2405d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower for t in threads: 2415d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower t.join() 2425d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower self.assertEqual(0, len(qr.exceptions_raised)) 2435d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower # The variable should be 3. 2445d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower self.assertEqual(3, var.eval()) 2455d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower 246f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurif __name__ == "__main__": 247f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur tf.test.main() 248