Skip to content

Commit 67d7c16

Browse files
sdesrozisDesroziers
andauthored
Updated timers to include fired hanlders' times (#1104) (#1194)
* update timers including fired handlers ones * autopep8 fix * fix measurement and add test * rename fire_start_time to handlers_start_time Co-authored-by: Desroziers <[email protected]> Co-authored-by: AutoPEP8 <>
1 parent b9f3467 commit 67d7c16

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed

ignite/engine/engine.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -695,25 +695,32 @@ def _internal_run(self) -> State:
695695
self._setup_engine()
696696

697697
time_taken = self._run_once_on_dataset()
698+
# time is available for handlers but must be update after fire
699+
self.state.times[Events.EPOCH_COMPLETED.name] = time_taken
700+
handlers_start_time = time.time()
701+
if self.should_terminate:
702+
self._fire_event(Events.TERMINATE)
703+
else:
704+
self._fire_event(Events.EPOCH_COMPLETED)
705+
time_taken += time.time() - handlers_start_time
706+
# update time wrt handlers
698707
self.state.times[Events.EPOCH_COMPLETED.name] = time_taken
699708
hours, mins, secs = _to_hours_mins_secs(time_taken)
700-
elapsed_time_message = "Epoch[%s] Complete. Time taken: %02d:%02d:%02d" % (
701-
self.state.epoch,
702-
hours,
703-
mins,
704-
secs,
709+
self.logger.info(
710+
"Epoch[%s] Complete. Time taken: %02d:%02d:%02d" % (self.state.epoch, hours, mins, secs)
705711
)
706712
if self.should_terminate:
707-
self._fire_event(Events.TERMINATE)
708-
self.logger.info(elapsed_time_message)
709713
break
710-
self._fire_event(Events.EPOCH_COMPLETED)
711-
self.logger.info(elapsed_time_message)
712714

713715
time_taken = time.time() - start_time
714-
hours, mins, secs = _to_hours_mins_secs(time_taken)
716+
# time is available for handlers but must be update after fire
715717
self.state.times[Events.COMPLETED.name] = time_taken
718+
handlers_start_time = time.time()
716719
self._fire_event(Events.COMPLETED)
720+
time_taken += time.time() - handlers_start_time
721+
# update time wrt handlers
722+
self.state.times[Events.COMPLETED.name] = time_taken
723+
hours, mins, secs = _to_hours_mins_secs(time_taken)
717724
self.logger.info("Engine run complete. Time taken: %02d:%02d:%02d" % (hours, mins, secs))
718725

719726
except BaseException as e:

tests/ignite/engine/test_engine.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -377,19 +377,29 @@ def test_state_get_event_attrib_value():
377377
def test_time_stored_in_state():
378378
def _test(data, max_epochs, epoch_length):
379379
sleep_time = 0.01
380+
extra_sleep_time = 0.1
380381
engine = Engine(lambda e, b: time.sleep(sleep_time))
381382

382-
def check_epoch_time(engine):
383+
@engine.on(Events.EPOCH_COMPLETED)
384+
def check_epoch_time():
383385
assert engine.state.times[Events.EPOCH_COMPLETED.name] >= sleep_time * epoch_length
386+
time.sleep(extra_sleep_time)
384387

385-
def check_completed_time(engine):
386-
assert engine.state.times[Events.COMPLETED.name] >= sleep_time * epoch_length * max_epochs
387-
388-
engine.add_event_handler(Events.EPOCH_COMPLETED, lambda e: check_epoch_time(e))
389-
engine.add_event_handler(Events.COMPLETED, lambda e: check_completed_time(e))
388+
@engine.on(Events.COMPLETED)
389+
def check_completed_time():
390+
assert (
391+
engine.state.times[Events.COMPLETED.name] >= (sleep_time * epoch_length + extra_sleep_time) * max_epochs
392+
)
393+
time.sleep(extra_sleep_time)
390394

391395
engine.run(data, max_epochs=max_epochs, epoch_length=epoch_length)
392396

397+
assert engine.state.times[Events.EPOCH_COMPLETED.name] >= sleep_time * epoch_length + extra_sleep_time
398+
assert (
399+
engine.state.times[Events.COMPLETED.name]
400+
>= (sleep_time * epoch_length + extra_sleep_time) * max_epochs + extra_sleep_time
401+
)
402+
393403
_test(list(range(100)), max_epochs=2, epoch_length=100)
394404
_test(list(range(200)), max_epochs=2, epoch_length=100)
395405
_test(list(range(200)), max_epochs=5, epoch_length=100)

0 commit comments

Comments
 (0)