
    def start(self, from_run=False):
        self._lock.acquire()

        if from_run or self._stopped:
            if not self.next_call:
                self.next_call = time.time()
            self.next_call += self.interval
            self._timer = Timer(self.next_call - time.time(), self._run)
            self._stopped = False
            self._timer.start()