code: def throttle( self, wait=True ):
          
          # I think there is a race in Thread.start(), hence the lock
          with self.thread_start_lock:
              if not self.thread_started:
                  self.thread.start( )
                  self.thread_started = True
          return self.semaphore.acquire( blocking=wait )
docs: If the wait parameter is True, this method returns True after suspending the current
          thread as necessary to ensure that no less than the configured minimum interval passed
          since the most recent time an invocation of this method returned True in any thread.
  
          If the wait parameter is False, this method immediatly returns True if at least the
          configured minimum interval has passed since the most recent time this method returned
          True in any thread, or False otherwise.