code: def add(self, timer):
          
          with self.lock:
              if self.heap:
                  top = self.heap[0]
              else:
                  top = None
  
              assert timer not in self.timers
              self.timers[timer] = timer
              heapq.heappush(self.heap, timer)
  
              # Check to see if we need to reschedule our main timer.
              # Only do this if we aren't expiring in the other thread.
              if self.heap[0] != top and not self.expiring:
                  if self.rtimer is not None:
                      self.rtimer.cancel()
                      # self.rtimer.join()
                      self.rtimer = None
  
              # If we are expiring timers right now then that will reschedule
              # as appropriate otherwise let's start a timer if we don't have
              # one
              if self.rtimer is None and not self.expiring:
                  top = self.heap[0]
                  ival = top.expire - time.time()
                  if ival < 0:
                      ival = 0
                  self.rtimer = threading.Timer(ival, self.expire)
                  self.rtimer.start()
docs: Add a timer to the heap