talks to will ultimately make the decision when and how to reap the
   workers with expired timers.
Usage:
  torch.distributed.elastic.timer.configure(LocalTimerClient())
  with expires(after=10):
      torch.distributed.all_reduce(...)

Server/Client Implementations
Below are the timer server and client pairs that are provided by
torchelastic.
Note:
Timer server and clients always have to be implemented and used in
  pairs since there is a messaging protocol between the server and
  client.
Below is a pair of timer server and client that is implemented based
on a "multiprocess.Queue".
class torch.distributed.elastic.timer.LocalTimerServer(mp_queue, max_interval=60, daemon=True)
Server that works with "LocalTimerClient". Clients are expected to
   be subprocesses to the parent process that is running this server.
   Each host in the job is expected to start its own timer server
   locally and each server instance manages timers for local workers