First scheme (preparing tools)

This commit is contained in:
Jean Sirmai 2021-03-30 16:56:55 +00:00
parent dd2a8044ea
commit a7c44bfbad
1 changed files with 65 additions and 26 deletions

View File

@ -1,33 +1,73 @@
import threading from threading import Thread
from datetime import timedelta from datetime import timedelta
from datetime import datetime from datetime import datetime
import random import random
import time import time
renew_length = 12
local_workers_number = 10
number_of_cycles = 20
renew = []
done = []
space = []
copy = []
def init():
for i in range(0, renew_length - 1):
renew.append(-1)
for j in range(0, local_workers_number):
space.append(random.randint(10,99))
copy.append(space[j])
print(' ',space,' < initial global state')
def disp(coord, id, start, prev, next):
print(' {} at [{}] {} > {} by thread n°{:>3} {!s:.4} {}'.format(
space,
coord,
prev,
next,
str(id),
datetime.now().timestamp() - start,
renew
)
)
def local_worker(coord, id): def local_worker(coord, id):
start = datetime.now().timestamp() start = datetime.now().timestamp()
val = random.randint(1,1000) val = random.randint(1,1000)
time.sleep(val / 1000) time.sleep(val / 1000)
prev = space[coord] prev = space[coord]
next = space[coord] = 10 + val % 89 next = space[coord] = 10 + val % 89
print('{} on [{}] : {} > {} by local thread n°{:>3} {!s:.4}'.format( done.append(id)
space, for i in renew:
coord, if renew[i] == id:
prev, renew[i] = -1
next, break
str(id), disp(coord, id, start, prev, next)
datetime.now().timestamp() - start
)
)
from threading import Thread init()
space = [] for k in range (1, number_of_cycles):
for i in range(0,10): n = 0
space.append(random.randint(10,99)) while renew[n] == -1: # a diagonal of zeros is expected !
print(space,' < initialglobal state') renew[n] = 0
for k in range (1,20): if n < renew_length - 2:
t = Thread(target=local_worker, args=(random.randint(0,len(space) - 1), k)) n += 1
break
# for n in range(0, renew_length - 1):
# if renew[n] == -1:
# renew[n] = 0
# break
t = Thread(target=local_worker, args=(random.randint(0, len(space) - 1), k))
t.start() t.start()
time.sleep(1)
print(' ',copy,' < initial global state (to compare)')
print(done)
done.sort()
print(done)
""" """
@ -45,20 +85,19 @@ Il délègue à la **CLI** les fonctions de communications avec les modules pér
1. recherche aléatoire d'un espace local 1. recherche aléatoire d'un espace local
+ si trouvé: + si trouvé:
- arrêt de cette recherche - arrêt de cette recherche
- préemption de cet espace local - préemption de cet espace local
- initiation d'un nouveau thread de calcul auquel est attibué cet espace local - initiation d'un nouveau thread de calcul auquel est attibué cet espace local
+ sinon arrêt de cette recherche en un temps fini + sinon arrêt de cette recherche en un temps fini
2. recherche des threads de calcul en fin d'exécution 2. recherche des threads de calcul en fin d'exécution
(ces threads se signalent dans une liste; leur temps de calcul est aléatoire) (ces threads se signalent dans une liste; leur temps de calcul est aléatoire)
+ si trouvé(s): + si trouvé(s):
- arrêt de cette recherche - arrêt de cette recherche
- mise à jour de l'état global (insertion du ou des états locaux calculés) - mise à jour de l'état global (insertion du ou des états locaux calculés)
- terminaison des threads de calcul concernés et libération des verrous associés - terminaison des threads de calcul concernés et libération des verrous associés
+ sinon arrêt de cette recherche en un temps fini + sinon arrêt de cette recherche en un temps fini
3. mesures / recueil des commandes / retour d'information
"""
3. mesures / recueil des commandes / retour d'information
"""