code: def run(self, interval):
          
          self._halt = False
          
          # TODO: some error checking to make sure valid paramenters are set
          if self.save_data:
              # initize data set
              self.current_dataset_name = self.set_name
              self.datafile.init_data(self.current_dataset_name, self.aitimes.shape, mode='open')
              self.set_name = increment_title(self.set_name)
  
          # save the start time and set last tick to expired, so first
          # acquisition loop iteration executes immediately
          self.start_time = time.time()
          self.last_tick = self.start_time - (interval/1000)
          self.interval = interval
          self.acq_thread = threading.Thread(target=self._worker)
  
          # arm the first read
          self.player.set_aochan(self.aochan)
          self.player.set_aichan(self.aichan)
  
          # make sure a signal is loaded
          self.reset_stim()
          
          # and go!
          self.acq_thread.start()
  
          return self.acq_thread
docs: See :meth:`AbstractAcquisitionRunner<sparkle.run.abstract_acquisition.AbstractAcquisitionRunner.run>`