diff --git a/scheduler.py b/scheduler.py deleted file mode 100644 index 50b7f39..0000000 --- a/scheduler.py +++ /dev/null @@ -1,132 +0,0 @@ -import threading -import time -import random - -class CurrentlyComputing(Exception): - pass - -class SuccessfulOperation(Exception): - pass - -class FailedOperation(Exception): - pass - - -class LocalThread(threading.Thread): - - def __init__(self, id, address, orientation, transitions): - - threading.Thread.__init__(self) - - self.id = id - self.address = address - self.orientation = orientation - self.transitions = transitions - self.returncode = CurrentlyComputing() - - def run(self): - print("Thread local n°{} parle depuis {} !".format(self.id, self.address)) - self.returncode = SuccessfulOperation() - time.sleep(random.randint(0,3)) - pass - - -""" -a = LocalThread() - -Si je lance a.run() - -0) a est un LocalThread. Python charge donc la liste des fonctions de LocalThread - -1) on demande la fonction run() de LocalThread - -2) L'instance concernée est a, on lance donc run(a) -""" - -class User: - - stop = False - - -class GreatScheduler(threading.Thread): - - def __init__(self, preemption_space, arrow_list, n_thread): - - threading.Thread.__init__(self) - - self.preemption_space = preemption_space - self.arrow_list = arrow_list - self.n_thread = n_thread - self.cur_id = -1 - - def run(self): - thread_list = [] - - while not User.stop: - - #print("--- Mesures et écoute ---") - #print("Espace global de préemption :\t {}".format(self.preemption_space)) - #print("Liste des flèches :\t {}".format(self.arrow_list)) - - ## Tirer une flêche au hasard - n = int(random.random()*len(self.arrow_list)) - elected_arrow = self.arrow_list[n] - - ## Vérification de l'espace global de préemption autour de la flêche - if not(len(thread_list) >= self.n_thread) and self.preemption_space[elected_arrow[0]]: - print("Espace local libre à {}".format(elected_arrow[0])) - self.preemption_space[elected_arrow[0]] = False - - ## Création du thread local - - self.cur_id += 1 - - thread_list.append( - LocalThread(self.cur_id, - elected_arrow[0], - elected_arrow[1], - TRANSITIONS_TREE - ) - ) - - ## Lancer le thread local - thread_list[-1].start() - - for thread in thread_list: - if not thread.is_alive(): - if not thread.returncode.__class__ is SuccessfulOperation: - if thread.returncode.__class__ is FailedOperation: - print("A optimiser : créer une règle") - else: - raise thread.returncode - print("Thread local n°{} est terminé".format(thread.id)) - - self.preemption_space[thread.address] = True - thread_list.pop(thread_list.index(thread)) - - ## Sortie du scheduler - print("Attente de la fin des thread locaux") - - for thread in thread_list: - thread.join() - if not thread.returncode.__class__ is SuccessfulOperation: - if thread.returncode.__class__ is FailedOperation: - print("A optimiser : créer une règle") - else: - raise thread.returncode - print("Thread local n°{} est terminé".format(thread.id)) - - -ARROW_NUMBER = 150 -SPACE_SIZE = 100 -PREEMPTION_GLOBAL_SPACE = [True] * SPACE_SIZE -ARROW_LIST = [(random.randint(0,SPACE_SIZE - 1),0) for x in range(ARROW_NUMBER)] -TRANSITIONS_TREE = None -MAX_THREAD = 50 - -scheduler = GreatScheduler(PREEMPTION_GLOBAL_SPACE, ARROW_LIST, MAX_THREAD) - -def test(): - scheduler.start() - time.sleep(10) - User.stop = True \ No newline at end of file