diff --git a/dist/iotAmak-0.0.3-py3-none-any.whl b/dist/iotAmak-0.0.3-py3-none-any.whl index d507a96c580dba28375964768a3027df3086f88c..9c6d61d0c9440660ef9b9a1c4112336e65cab689 100644 Binary files a/dist/iotAmak-0.0.3-py3-none-any.whl and b/dist/iotAmak-0.0.3-py3-none-any.whl differ diff --git a/iotAmak/scheduler.py b/iotAmak/scheduler.py index ef7f5b5d1484912dd5bd45b5badb9b6e89c072a3..13203119af943a6a31cab2fc4d5eeadc5d2f37b4 100644 --- a/iotAmak/scheduler.py +++ b/iotAmak/scheduler.py @@ -1,6 +1,7 @@ """ Scheduler class file """ +from threading import Semaphore from time import sleep import sys @@ -19,9 +20,6 @@ class Scheduler(Schedulable): def __init__(self, broker_ip: str) -> None: Schedulable.__init__(self, broker_ip, "Scheduler") - self.sleep_between_cycle = 0 - - self.ihm_token = 0 self.paused = True self.nbr_agent = 0 @@ -32,8 +30,9 @@ class Scheduler(Schedulable): self.subscribe("ihm/pause", self.pause) self.subscribe("ihm/unpause", self.unpause) - self.agent_waiting = 0 - self.schedulable_waiting = 0 + self.agent_semaphore = Semaphore(0) + self.schedulable_semaphore = Semaphore(0) + self.ihm_semaphore = Semaphore(0) print("Init done") @@ -42,26 +41,26 @@ class Scheduler(Schedulable): Function called when the IHM pause the scheduler """ self.paused = True - self.ihm_token = 0 + self.ihm_semaphore.acquire() def unpause(self, client, userdata, message) -> None: """ Function called when the IHM unpause the scheduler """ self.paused = False - self.ihm_token = 1 + self.ihm_semaphore.release() def step(self, client, userdata, message) -> None: """ Function called by the IHM when the scheduler is in Step by Step mode """ - self.ihm_token += 1 + self.ihm_semaphore.release() def update_schedulable(self, client, userdata, message) -> None: """ Function called whenever the amas/env have finished an action and is waiting """ - self.schedulable_waiting += 1 + self.schedulable_semaphore.release() print("__Schedulable is waiting") def update_nbr_agent(self, client, userdata, message) -> None: @@ -77,24 +76,22 @@ class Scheduler(Schedulable): """ Called whenever an agent have done an action and is waiting """ - self.agent_waiting += 1 + self.agent_semaphore.release() print("__Agent done") def wait_agent(self) -> None: """ Called when the scheduler is waiting for all agent do have finished their action """ - while self.agent_waiting < self.nbr_agent: - sleep(self.wait_delay) - self.agent_waiting = 0 + for _ in range(self.nbr_agent): + self.agent_semaphore.acquire() def wait_schedulable(self) -> None: """ Called when the scheduler is waiting for both amas and env to have finished their action """ - while self.schedulable_waiting < 2: - sleep(self.wait_delay) - self.schedulable_waiting = 0 + for _ in range(2): + self.schedulable_semaphore.acquire() def wait_ihm(self) -> None: """ @@ -102,9 +99,7 @@ class Scheduler(Schedulable): """ if not self.paused: return - while self.ihm_token == 0: - sleep(self.wait_delay) - self.ihm_token -= 1 + self.ihm_semaphore.acquire() def first_part(self) -> None: """ @@ -158,7 +153,6 @@ class Scheduler(Schedulable): print("-Last part") self.last_part() - sleep(self.sleep_between_cycle) self.nbr_cycle += 1 self.publish("scheduler/cycledone", "")