Použití vláken v rámci uzlu distribuované sítě (2)
Užitečné odkazy
- Distsim knihovna
- Distsim příklady
- Python
threading
— Thread-based parallelism - Python
nonlocal
statement
Distsim changelog 4.11.2020
Node.recv_any
- commit acb4e96
Výraz nonlocal
Umožňuje hledat vazby symbolů v nejbližším nadřazeném prostředí. Výchozí chování je prohledat prostředí lokální. Tento krok je v případě nonlocal
přeskočen.
1
2
3
4
5
6
7
8
9
10
def function():
result = None
def inner_function():
nonlocal result
result = True
inner_function()
print(result)
Výraz nonlocal
je užitečný pokud vytváříme vlákna v rámci procesu mezi kterými chceme sdílet data.
Rozšíření Heart beat
Dnešním úkolem bude rozšířit Heart Beat z minulého cvičení. V minulém cvičení počet úloh odpovídal počtu worker
uzlů. V realitě máme většinou větší počet úkolů než je uzlů typu worker
, proto je nutné implementovat postupné opakované přiřazování práce jednotlivým uzlům.
Rozšířený uzel master
bude mít tedy tyto tři části:
- Rozeslání úkolů
- Kontrola Heart Beats
- Příjem a třídění zpráv
Uzel master
tedy rozdá práci tak, aby zaměstnal všechny nepracující uzly typu worker
. Jakmile nějaký worker
dokončí práci, informuje o tom uzel master
. Ten si výsledek uloží, a poté uzlu pošle práci další.
Úkol
Naprogramujte rozšířenou verzi Heart Beats. Jako problém použíjte zvětšení čísla o jedničku. Uzel master
tedy obdrží list
hodnot, který je větší než počet uzlů worker
. Výsledkem bude seznam, kde každé číslo bude zvětšeno o jedna.