code: def run(self):
          
          try:
              if self.aotask is None:
                  print u"You must arm the calibration first"
                  return
              # acquire data and stop task, lock must have been release by
              # previous reset
              self.daq_lock.acquire()
              self.aotask.StartTask()
              self.aitask.StartTask()
  
              # blocking read
              data = self.aitask.read()
  
              # write task should always be shorter than read
              # self.aotask.WaitUntilTaskDone(10)
  
              self.nacquired += 1
              
              self.aitask.stop()
              self.aotask.stop()
              
          except:
              print u'ERROR! TERMINATE!'
              self.daq_lock.release()
              self.stop()
              raise
  
          return data
docs: Begins simultaneous generation/acquisition
  
          :returns: numpy.ndarray -- read samples