From 2befe983edf5b8309d9a86753a81b39f3d9133ba Mon Sep 17 00:00:00 2001 From: shinedday <shinedday@gmail.com> Date: Thu, 19 May 2022 10:56:13 +0200 Subject: [PATCH] Improved scheduler wait with semaphore --- dist/iotAmak-0.0.3-py3-none-any.whl | Bin 11157 -> 11136 bytes iotAmak/scheduler.py | 34 ++++++++++++---------------- 2 files changed, 14 insertions(+), 20 deletions(-) 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 GIT binary patch delta 2181 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 delta 2166 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 D4k!v- diff --git a/iotAmak/scheduler.py b/iotAmak/scheduler.py index ef7f5b5..1320311 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", "") -- GitLab