| 102 | self._last_write = -1 |
| 103 | |
| 104 | def write(self): |
| 105 | storage = get_event_storage() |
| 106 | to_save = defaultdict(dict) |
| 107 | |
| 108 | for k, (v, iter) in storage.latest_with_smoothing_hint(self._window_size).items(): |
| 109 | # keep scalars that have not been written |
| 110 | if iter <= self._last_write: |
| 111 | continue |
| 112 | to_save[iter][k] = v |
| 113 | if len(to_save): |
| 114 | all_iters = sorted(to_save.keys()) |
| 115 | self._last_write = max(all_iters) |
| 116 | |
| 117 | for itr, scalars_per_iter in to_save.items(): |
| 118 | scalars_per_iter["iteration"] = itr |
| 119 | self._file_handle.write(json.dumps(scalars_per_iter, sort_keys=True) + "\n") |
| 120 | self._file_handle.flush() |
| 121 | try: |
| 122 | os.fsync(self._file_handle.fileno()) |
| 123 | except AttributeError: |
| 124 | pass |
| 125 | |
| 126 | def close(self): |
| 127 | self._file_handle.close() |