X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fexecution%2Fscheduler.py;h=6ebcfea3f1128bacd746fe8a2719687bb9f92450;hb=e55924b6886bd7382a28e1ae235c4810f852e163;hp=53a7530c93c92b32595305049a220bb7a3f83802;hpb=4c5d308e0d13c0dc4b54556f149bc2a9cd585592;p=nepi.git diff --git a/src/nepi/execution/scheduler.py b/src/nepi/execution/scheduler.py index 53a7530c..6ebcfea3 100644 --- a/src/nepi/execution/scheduler.py +++ b/src/nepi/execution/scheduler.py @@ -3,9 +3,8 @@ # Copyright (C) 2013 INRIA # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation; # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -21,16 +20,26 @@ import itertools import heapq class TaskStatus: + """ Execution state of the Task + """ NEW = 0 DONE = 1 ERROR = 2 - class Task(object): - """ This class is to define a task, that is represented by an id, - an execution time 'timestamp' and an action 'callback """ + """ A Task represents an operation to be executed by the + ExperimentController scheduler + """ def __init__(self, timestamp, callback): + """ + :param timestamp: Future execution date of the operation + :type timestamp: str + + :param callback: A function to invoke in order to execute the operation + :type callback: function + + """ self.id = None self.timestamp = timestamp self.callback = callback @@ -38,7 +47,7 @@ class Task(object): self.status = TaskStatus.NEW class HeapScheduler(object): - """ Create a Heap Scheduler. + """ Create a Heap Scheduler .. note:: @@ -54,10 +63,15 @@ class HeapScheduler(object): self._valid = set() self._idgen = itertools.count(1) + @property + def pending(self): + """ Returns the list of pending task ids """ + return self._valid + def schedule(self, task): - """ Add the task 'task' in the heap of the scheduler + """ Add a task to the queue ordered by task.timestamp and arrival order - :param task: task that need to be schedule + :param task: task to schedule :type task: task """ if task.id == None: @@ -69,10 +83,11 @@ class HeapScheduler(object): return task def remove(self, tid): - """ Remove a task form the heap + """ Remove a task form the queue - :param tid: Id of the task that need to be removed + :param tid: Id of the task to be removed :type tid: int + """ try: self._valid.remove(tid) @@ -80,8 +95,7 @@ class HeapScheduler(object): pass def next(self): - """ Get the next task in the scheduler - + """ Get the next task in the queue by timestamp and arrival order """ while self._queue: try: