Skip to content

Commit

Permalink
Fix flush_sec argument, expose flush for summarywriter (#451)
Browse files Browse the repository at this point in the history
* fix flush_secs and max_queue argument for summarywriter

* add test for flush

* disable codecov/patch
  • Loading branch information
lanpa committed Jun 18, 2019
1 parent 097c178 commit e932310
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 6 deletions.
8 changes: 8 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
coverage:
status:
project: # measuring the overall project coverage
default: # context, you can create multiple ones with custom titles
enabled: yes
patch:
default:
enabled: no
24 changes: 19 additions & 5 deletions tensorboardX/writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,9 @@ def __init__(self, logdir=None, comment='', purge_step=None, max_queue=10,
'runs', current_time + '_' + socket.gethostname() + comment)
self.logdir = logdir
self.purge_step = purge_step
self.max_queue = max_queue
self.flush_secs = flush_secs
self.filename_suffix = filename_suffix
self._max_queue = max_queue
self._flush_secs = flush_secs
self._filename_suffix = filename_suffix
self._write_to_disk = write_to_disk
self.kwargs = kwargs

Expand Down Expand Up @@ -302,13 +302,21 @@ def _get_file_writer(self):
if self.all_writers is None or self.file_writer is None:
if 'purge_step' in self.kwargs.keys():
most_recent_step = self.kwargs.pop('purge_step')
self.file_writer = FileWriter(logdir=self.logdir, **self.kwargs)
self.file_writer = FileWriter(logdir=self.logdir,
max_queue=self._max_queue,
flush_secs=self._flush_secs,
filename_suffix=self._filename_suffix,
**self.kwargs)
self.file_writer.add_event(
Event(step=most_recent_step, file_version='brain.Event:2'))
self.file_writer.add_event(
Event(step=most_recent_step, session_log=SessionLog(status=SessionLog.START)))
else:
self.file_writer = FileWriter(logdir=self.logdir, **self.kwargs)
self.file_writer = FileWriter(logdir=self.logdir,
max_queue=self._max_queue,
flush_secs=self._flush_secs,
filename_suffix=self._filename_suffix,
**self.kwargs)
self.all_writers = {self.file_writer.get_logdir(): self.file_writer}
return self.file_writer

Expand Down Expand Up @@ -998,6 +1006,12 @@ def close(self):
writer.close()
self.file_writer = self.all_writers = None

def flush(self):
if self.all_writers is None:
return # ignore double close
for writer in self.all_writers.values():
writer.flush()

def __enter__(self):
return self

Expand Down
58 changes: 57 additions & 1 deletion tests/test_writer.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from tensorboardX import SummaryWriter
from tensorboard.compat.tensorflow_stub.pywrap_tensorflow import PyRecordReader_New
from tensorboardX.proto import event_pb2

import numpy as np
import pytest
import unittest

import time
freqs = [262, 294, 330, 349, 392, 440, 440, 440, 440, 440, 440]

true_positive_counts = [75, 64, 21, 5, 0]
Expand All @@ -15,6 +17,60 @@


class WriterTest(unittest.TestCase):
def test_flush(self):
N_TEST = 5
w = SummaryWriter(flush_secs=1)
f = w.file_writer.event_writer._ev_writer._file_name
for i in range(N_TEST):
w.add_scalar('a', i)
time.sleep(2)
r = PyRecordReader_New(f)
r.GetNext() # meta data, so skip
for _ in range(N_TEST): # all of the data should be flushed
r.GetNext()

def test_flush_timer_is_long_so_data_is_not_there(self):
with self.assertRaises(BaseException):
N_TEST = 5
w = SummaryWriter(flush_secs=20)
f = w.file_writer.event_writer._ev_writer._file_name
for i in range(N_TEST):
w.add_scalar('a', i)
time.sleep(2)
r = PyRecordReader_New(f)
r.GetNext() # meta data, so skip
for _ in range(N_TEST): # missing data
r.GetNext()

def test_flush_after_close(self):
N_TEST = 5
w = SummaryWriter(flush_secs=20)
f = w.file_writer.event_writer._ev_writer._file_name
for i in range(N_TEST):
w.add_scalar('a', i)
time.sleep(2)
w.close()
r = PyRecordReader_New(f)
r.GetNext() # meta data, so skip
for _ in range(N_TEST): # all of the data should be flushed
r.GetNext()

def test_flush(self):
N_TEST = 5
w = SummaryWriter(flush_secs=20)
f = w.file_writer.event_writer._ev_writer._file_name
for i in range(N_TEST):
w.add_scalar('a', i)
time.sleep(2)
w.flush()
r = PyRecordReader_New(f)
r.GetNext() # meta data, so skip
for _ in range(N_TEST): # all of the data should be flushed
r.GetNext()

def test_auto_close(self):
pass

def test_writer(self):
with SummaryWriter() as writer:
sample_rate = 44100
Expand Down

0 comments on commit e932310

Please sign in to comment.