code: def start(self):
          
          if self._isRunning:
              return
  
          if self._cease.is_set():
              self._cease.clear()  # restart
  
          class Runner(threading.Thread):
              @classmethod
              def run(cls):
                  nextRunAt = cls.setNextRun()
  
                  while not self._cease.is_set():
                      if datetime.now() >= nextRunAt:
                          self._run()
                          nextRunAt = cls.setNextRun()
  
              @classmethod
              def setNextRun(cls):
                  # return datetime.now() + timedelta(seconds=self._interval)
                  return self._interval.nextRunAt()
  
          runner = Runner()
          runner.setDaemon(True)
          runner.start()
          self._isRunning = True
docs: Start the periodic runner