From f35dcb118a90990b08e12ee867830287ea9e65e8 Mon Sep 17 00:00:00 2001
From: LAHMADI Abdelkader <lahmadi@loria.fr>
Date: Sun, 9 Jan 2022 16:02:59 +0100
Subject: [PATCH] fourniture TP1

---
 TP1/acquisition.py | 25 +++++++++++++++++++++++++
 TP1/clientRPC.py   |  4 ++++
 TP1/esclave.py     | 42 ++++++++++++++++++++++++++++++++++++++++++
 TP1/maitre.py      | 27 +++++++++++++++++++++++++++
 TP1/seq.py         | 21 +++++++++++++++++++++
 TP1/serveurRPC.py  | 15 +++++++++++++++
 6 files changed, 134 insertions(+)
 create mode 100644 TP1/acquisition.py
 create mode 100644 TP1/clientRPC.py
 create mode 100644 TP1/esclave.py
 create mode 100644 TP1/maitre.py
 create mode 100644 TP1/seq.py
 create mode 100644 TP1/serveurRPC.py

diff --git a/TP1/acquisition.py b/TP1/acquisition.py
new file mode 100644
index 0000000..53fd870
--- /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 0000000..ee223e0
--- /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 0000000..098528d
--- /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 0000000..bf690ab
--- /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 0000000..25b80d1
--- /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 0000000..26dd37f
--- /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()
-- 
GitLab