diff --git a/TP1/acquisition.py b/TP1/acquisition.py new file mode 100644 index 0000000000000000000000000000000000000000..53fd870d84db0de4af5d0a4805ab08bd5ee7c93e --- /dev/null +++ b/TP1/acquisition.py @@ -0,0 +1,25 @@ +import numpy as np +import time +# Une liste de mesures. Chaque imesure est un couple +# (nom, temps d'acquisition en secondes, n valeurs). +MESURES = [ + ("U", 5,4), + ("I", 5,4), + ("PA", 6,4), + ("PR", 6,4), +] + + +def getMesure(m,t,n): + sigma = 0.1 + if m=='U': + mu = 5 + elif m=='I': + mu = 1 + elif m=='PA': + mu = 2 + elif m=='PR': + mu = 3 + time.sleep(t) + valeurs = np.random.normal(mu, sigma, n) + return valeurs \ No newline at end of file diff --git a/TP1/clientRPC.py b/TP1/clientRPC.py new file mode 100644 index 0000000000000000000000000000000000000000..ee223e0397b6463cb448f31b1dbcea41d9c39245 --- /dev/null +++ b/TP1/clientRPC.py @@ -0,0 +1,4 @@ +import rpyc + +conn = rpyc.connect("localhost",18861) +print(conn.root.f(2,4)) \ No newline at end of file diff --git a/TP1/esclave.py b/TP1/esclave.py new file mode 100644 index 0000000000000000000000000000000000000000..098528d364d3836facf85a967d4e8910a78dc14c --- /dev/null +++ b/TP1/esclave.py @@ -0,0 +1,42 @@ +import time +import rpyc +import numpy as np +from acquisition import * + +def create_connection(): + return rpyc.connect("localhost", 18861) + + +def calcul_moyenne(id_, mesure, t, n): + print("Moyenne de {} est en préparation ({t}s)") + valeurs = getMesure(mesure,t,n) + moyenne = np.mean(valeurs) + return "Moyenne de {} est {:.2f}".format(mesure,moyenne) + + +def send_result(conn, task, result): + # A compléter + + +def ask_task(conn): + #A compléter + + +def run(conn): + # `task` est un tuplet `(mesure, temps de préparation, nombre de valeurs)`. + task = ask_task(conn) + + while task: + id_, mesure, t,n = task + + print("{} à calculer reçue {}".format(mesure,id_)) + prepared_moyenne = calcul_moyenne(id_, mesure, t,n) + + print(f"Moyenne de {} prête envoyée {}".format(mesure,id_)) + send_result(conn, task, prepared_moyenne) + + task = ask_task(conn) + + +if __name__ == "__main__": + run(create_connection()) diff --git a/TP1/maitre.py b/TP1/maitre.py new file mode 100644 index 0000000000000000000000000000000000000000..bf690ab53ea17b05be520cec772bf0fc70fd6e2e --- /dev/null +++ b/TP1/maitre.py @@ -0,0 +1,27 @@ +from threading import Lock +from rpyc.utils.server import ThreadedServer +import rpyc +import time +from acquisition import MESUTRES +tasks_to_do = [(i, *MESURES) for i, mesure in enumerate(MESURES)] +tasks_being_done = [] +lock = Lock() # Pour protéger les listes de tâches +start_time = None + +class MasterService(rpyc.Service): + def exposed_give_task(self): + global start_time + #A compléter + + return task + def exposed_receive_result(self,task,result): + print(f"{result} reçue") + #A compléter + + +def start(): + server = ThreadedServer(MasterService, port=18861) + server.start() + +if __name__ == "__main__": + start() diff --git a/TP1/seq.py b/TP1/seq.py new file mode 100644 index 0000000000000000000000000000000000000000..25b80d1fd9e8de486ba518ae1aa5c11aa83f8652 --- /dev/null +++ b/TP1/seq.py @@ -0,0 +1,21 @@ +import time +from random import shuffle +from acquisition import * +import numpy as np + +def moyennes_mesures(mesures): + moyennes = {} + for mesure,t,n in mesures: + print("Collecte de {} valeurs de {} toutes les ({}s)...".format(n,mesure,t)) + valeurs = getMesure(mesure,t,n) + moyenne = np.mean(valeurs) + print("Moyenne de {} est {:.2f}".format(mesure,moyenne)) + + +if __name__ == "__main__": + shuffle(MESURES) + print(MESURES) + start_time = time.time() + moyennes_mesures(MESURES) + end_time = time.time() + print("Temps de calcul: {:.1f}s".format(end_time - start_time)) diff --git a/TP1/serveurRPC.py b/TP1/serveurRPC.py new file mode 100644 index 0000000000000000000000000000000000000000..26dd37f0d6b426d674ebd28d8e3965bfe57ebeb7 --- /dev/null +++ b/TP1/serveurRPC.py @@ -0,0 +1,15 @@ +import rpyc +from rpyc.utils.server import ThreadedServer + + +class MyService(rpyc.Service): + def exposed_f(self,x,y): + return x+y + def g(self): + return 43 +def start(): + t = ThreadedServer(MyService, port=18861) + t.start() + +if __name__ == "__main__": + start()