Example #1
0
    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()
Example #2
0
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)
Example #3
0
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
Example #5
0
def getDevicesInformation():
    infoCenter = InfoCenter()
    return infoCenter.getAvailableDevicesInformation()
Example #6
0
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()
Example #7
0
def delATask(taskID: str):
    infoCenter = InfoCenter()
    infoCenter.delATask(taskID)
Example #8
0
def safeExit():
    infoCenter = InfoCenter()
    infoCenter.delAllTask()
Example #9
0
def changeDevices(newDevicesIDList: [int]):
    infoCenter = InfoCenter()
    infoCenter.changeDevices(newDevicesIDList)
Example #10
0
def getTasksInformation():
    infoCenter = InfoCenter()
    return infoCenter.getTasksInformation()