aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/summary
diff options
context:
space:
mode:
authorGravatar Justine Tunney <jart@google.com>2017-11-28 19:07:56 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2017-11-28 19:11:39 -0800
commit60d2e51254028df73f650abe07fad024c49688bb (patch)
treeeb34e43a94d4425edc31921f12efbbe725827f0e /tensorflow/contrib/summary
parentbf05a2d1dce3af9b88dcd5c9253a163353951c99 (diff)
Introduce tf.contrib.summary.flush
This op has been useful while writing benchmarks. PiperOrigin-RevId: 177254316
Diffstat (limited to 'tensorflow/contrib/summary')
-rw-r--r--tensorflow/contrib/summary/summary.py1
-rw-r--r--tensorflow/contrib/summary/summary_ops.py21
-rw-r--r--tensorflow/contrib/summary/summary_ops_test.py27
3 files changed, 49 insertions, 0 deletions
diff --git a/tensorflow/contrib/summary/summary.py b/tensorflow/contrib/summary/summary.py
index f783179f61..9e6af5232f 100644
--- a/tensorflow/contrib/summary/summary.py
+++ b/tensorflow/contrib/summary/summary.py
@@ -31,6 +31,7 @@ from tensorflow.contrib.summary.summary_ops import audio
from tensorflow.contrib.summary.summary_ops import create_summary_db_writer
from tensorflow.contrib.summary.summary_ops import create_summary_file_writer
from tensorflow.contrib.summary.summary_ops import eval_dir
+from tensorflow.contrib.summary.summary_ops import flush
from tensorflow.contrib.summary.summary_ops import generic
from tensorflow.contrib.summary.summary_ops import graph
from tensorflow.contrib.summary.summary_ops import histogram
diff --git a/tensorflow/contrib/summary/summary_ops.py b/tensorflow/contrib/summary/summary_ops.py
index 8e37987cb7..de6f2cd79f 100644
--- a/tensorflow/contrib/summary/summary_ops.py
+++ b/tensorflow/contrib/summary/summary_ops.py
@@ -516,6 +516,27 @@ def import_event(tensor, name=None):
context.context().summary_writer_resource, tensor, name=name)
+def flush(writer=None, name=None):
+ """Forces summary writer to send any buffered data to storage.
+
+ This operation blocks until that finishes.
+
+ Args:
+ writer: The @{tf.contrib.summary.SummaryWriter} resource to flush.
+ The thread default will be used if this parameter is None.
+ Otherwise a @{tf.no_op} is returned.
+ name: A name for the operation (optional).
+
+ Returns:
+ The created @{tf.Operation}.
+ """
+ if writer is None:
+ writer = context.context().summary_writer_resource
+ if writer is None:
+ return control_flow_ops.no_op()
+ return gen_summary_ops.flush_summary_writer(writer, name=name)
+
+
def eval_dir(model_dir, name=None):
"""Construct a logdir for an eval summary writer."""
return os.path.join(model_dir, "eval" if not name else "eval_" + name)
diff --git a/tensorflow/contrib/summary/summary_ops_test.py b/tensorflow/contrib/summary/summary_ops_test.py
index ad89c0c36a..3fe421a7e9 100644
--- a/tensorflow/contrib/summary/summary_ops_test.py
+++ b/tensorflow/contrib/summary/summary_ops_test.py
@@ -109,6 +109,33 @@ class TargetTest(test_util.TensorFlowTestCase):
self.assertEqual(len(events), 2)
self.assertEqual(events[1].summary.value[0].tag, 'scalar')
+ def testMaxQueue(self):
+ logs = tempfile.mkdtemp()
+ with summary_ops.create_summary_file_writer(
+ logs, max_queue=2, flush_millis=999999,
+ name='lol').as_default(), summary_ops.always_record_summaries():
+ get_total = lambda: len(summary_test_util.events_from_logdir(logs))
+ # Note: First tf.Event is always file_version.
+ self.assertEqual(1, get_total())
+ summary_ops.scalar('scalar', 2.0, step=1)
+ self.assertEqual(1, get_total())
+ summary_ops.scalar('scalar', 2.0, step=2)
+ self.assertEqual(3, get_total())
+
+ def testFlush(self):
+ logs = tempfile.mkdtemp()
+ with summary_ops.create_summary_file_writer(
+ logs, max_queue=999999, flush_millis=999999,
+ name='lol').as_default(), summary_ops.always_record_summaries():
+ get_total = lambda: len(summary_test_util.events_from_logdir(logs))
+ # Note: First tf.Event is always file_version.
+ self.assertEqual(1, get_total())
+ summary_ops.scalar('scalar', 2.0, step=1)
+ summary_ops.scalar('scalar', 2.0, step=2)
+ self.assertEqual(1, get_total())
+ summary_ops.flush()
+ self.assertEqual(3, get_total())
+
class DbTest(summary_test_internal.SummaryDbTest):