class_docstr: Measures time (resets if given interval elapses) on rank 0
  and propagates result to other ranks.
  Propagation is done asynchronously from previous step
  in order to avoid blocking of a training process.
code: def wait_remaining_work(self) -> None:
      if self._prev_work is not None:
          self._prev_work.wait()
  
imports: import datetime
  import logging
  import os
  from collections import defaultdict
  from contextlib import contextmanager
  from time import perf_counter
  from typing import Any, Dict, Generator, List, Optional, Protocol, runtime_checkable, Sequence, Tuple, TypeVar
  import numpy
  import torch
  import torch.distributed
  from tabulate import tabulate
  from torchtnt.utils.distributed import PGWrapper
label_desc: Use image node_id 3 for calling the FullSyncPeriodicTimer obj's underlying member method code with example usage: obj.wait_remaining_work() without return types