def __init__( self, strategy: SchedulerStrategyBase = None, timeDelay: int = 60, maxTaskPerDevice: int = 10000, ): self.infoCenter = InfoCenter() self.timeDelay = timeDelay self.maxTaskPerDevice = maxTaskPerDevice if hasattr(self, "strategy"): if strategy != None: # change strategy self.strategy = strategy self.strategy.scheduler = self else: if strategy is None: # set default strategy strategy = DefaultStrategy() # set strategy self.strategy = strategy self.strategy.scheduler = self if not hasattr(self, "routineScheduler"): self.startRoutineTask()
def runExp(taskID: str, command: str): infoCenter = InfoCenter() analyzeTask: AnalyzeTask = infoCenter.getTaskByID(taskID) assert analyzeTask != None # Wrong task assert isinstance(analyzeTask, AnalyzeTask) # Not an analyze task assert isinstance(analyzeTask.outputBuffer, AnalyzerBuffer) # don't have analyze buffer assert analyzeTask.process != None # not running assert analyzeTask.process.is_alive() # not alive assert analyzeTask.commandQueue != None # don't have command queue analyzeTask.commandQueue.put(command, block=False)
def getAnalyzeOutput(taskID: str, style: bool = True): infoCenter = InfoCenter() analyzeTask: AnalyzeTask = infoCenter.getTaskByID(taskID) assert analyzeTask != None # Wrong task assert isinstance(analyzeTask, AnalyzeTask) # Not an analyze task assert isinstance(analyzeTask.outputBuffer, AnalyzerBuffer) # don't have analyze buffer assert analyzeTask.process != None # not running assert analyzeTask.process.is_alive() # not alive if style: return analyzeTask.outputBuffer.getStyledText() else: return analyzeTask.outputBuffer.getPlainText()
def __init__(self): """ WARNING: before a run requirement send to scheduler, infoCenter.deviceLock should be released. """ self.infoCenter = InfoCenter() self.scheduler = None
def getDevicesInformation(): infoCenter = InfoCenter() return infoCenter.getAvailableDevicesInformation()
class Scheduler(Singleton): def __init__( self, strategy: SchedulerStrategyBase = None, timeDelay: int = 60, maxTaskPerDevice: int = 10000, ): self.infoCenter = InfoCenter() self.timeDelay = timeDelay self.maxTaskPerDevice = maxTaskPerDevice if hasattr(self, "strategy"): if strategy != None: # change strategy self.strategy = strategy self.strategy.scheduler = self else: if strategy is None: # set default strategy strategy = DefaultStrategy() # set strategy self.strategy = strategy self.strategy.scheduler = self if not hasattr(self, "routineScheduler"): self.startRoutineTask() def giveATask(self, task: TaskInformation, otherArgs: dict): print("Received task " + task.ID + ".") task.extraInfo = otherArgs self.infoCenter.addATask(task) self.strategy.decide(self.maxTaskPerDevice, self.timeDelay) def runTask(self, task: TaskInformation, devices: [int]): task.devices = devices assert task.type == "Train" or task.type == "Analyze" if task.type == "Train": TProcess = TrainProcess(task) task.process = TProcess TProcess.start() elif task.type == "Analyze": ABuffer = AnalyzerBuffer() task.outputBuffer = ABuffer AProcess = AnalyzeProcess(task, outputBuffer=ABuffer) task.process = AProcess AProcess.start() print(task.type + " task " + task.ID + " is runing now.") self.infoCenter.runATask(task) def __routineRun(self): self.strategy.decide(self.maxTaskPerDevice, self.timeDelay) def changeTimeDelay(self, delay): self.timeDelay = delay self.routineScheduler.remove_job(self.routineJob.id) self.routineJob = self.routineScheduler.add_job(self.__routineRun, "interval", seconds=self.timeDelay) def changeMaxTaskPerDevice(self, newValue: int): self.maxTaskPerDevice = newValue def startRoutineTask(self): self.routineScheduler = BackgroundScheduler() self.routineJob = self.routineScheduler.add_job(self.__routineRun, "interval", seconds=self.timeDelay) self.routineScheduler.start()
def delATask(taskID: str): infoCenter = InfoCenter() infoCenter.delATask(taskID)
def safeExit(): infoCenter = InfoCenter() infoCenter.delAllTask()
def changeDevices(newDevicesIDList: [int]): infoCenter = InfoCenter() infoCenter.changeDevices(newDevicesIDList)
def getTasksInformation(): infoCenter = InfoCenter() return infoCenter.getTasksInformation()