class DataDaemon: """ #Multithreading data gathering. Single-threaded for now, issues with multithreading. """ def __init__(self, run): self.__run = run self.__hash = str(uuid.uuid4()) self.__raven = Raven() self.__db = MySQLHelper() def _begin(self): self.__db.insertRunInfo([self.__hash,self.__run]) def run(self): self._begin() FAKE_DATA = (-1,-1,-1,self.__run, self.__hash) while True: data=FAKE_DATA try: if not self.__raven.exists(): print("searching...") self.__raven.refresh() if self.__raven.exists(): GET_DEMAND = {'Name':'get_instantaneous_demand'} self.__raven.write(GET_DEMAND) time.sleep(.1) XMLresponse = self.__raven.read() if (XMLresponse.tag == 'InstantaneousDemand'): attributes = list(XMLresponse) attribute_list = [3,4,5] # XML frag contains hex, convert to decimal data = tuple(int(attributes[i].text, 16) for i in attribute_list) data += (self.__run,self.__hash) print(data) self.__db.insertDemandData(data) except: self.__raven._raven = None self.__raven.refresh() data = FAKE_DATA self.__db.insertDemandData(data) print(sys.exc_info(), file=sys.stderr) time.sleep(8)
class DataDaemon: """ Multithreading data gathering. """ def __init__(self, run): self.__run = run self.__raven = Raven() self.__db = MySQLHelper() self.__running = False def storeRavenData(self): try: if not self.__raven.exists(): self.__raven.refresh() if self.__running and self.__raven.exists(): GET_DEMAND = {'Name': 'get_instantaneous_demand'} self.__raven.write(GET_DEMAND) time.sleep(.1) XMLresponse = self.__raven.read() if (XMLresponse.tag != 'InstantaneousDemand'): data = (-1, -1, -1, self.__run) else: attributes = list(XMLresponse) attribute_list = [3, 4, 5] # XML frag contains hex, convert to decimal data = tuple( int(attributes[i].text, 16) for i in attribute_list) data += (self.__run, ) print(data) self.__db.insertDemandData(data) threading.Timer(7 * SECOND, self.storeRavenData).start() except: print(sys.exc_info(), file=sys.stderr) def start(self): self.__running = True self.storeRavenData() def stop(self): self.__running = False