Hej,
Mam skrypt, który opiera się na wykonaniu krok po kroku, takiej samej operacji w wielu grupach i lokalizacjach. Ogólnie, działa to ok, ale zastanawiam się nad zrobieniem tego asynchronicznie, synchronizując po wykonaniu danej operacji na całej grupie.
Mianowicie, działa to tak:
Zadanie 1;
Zadanie 2;
Zadanie 3;
...
Każda z grup złożonych z elementów przechodzi przez wszystkie zadania w następujący sposób:
Element 1 > Zadanie 1
Element 2 > Zadanie 1
Element 3 > Zadanie 1
...
Element 1 > Zadanie 2
itd.
Z tym że te elementy są od siebie niezależne, więc mogłyby być wywoływane równocześnie, natomiast przed zadaniem 2 musi dla danego elementu zostać wykonane zadanie 1.
Każde z zadań jest wykonywane przez subprocess:
def run_command(bash_string):
subprocess.run(bash_string, shell=True, universal_newlines=True, executable="/bin/bash")
Czy ktoś ma może sprawdzony sposób na coś w rodzaju thread-pool, gdzie uruchamiamy wszystkie elementy dla danego zadania asynchronicznie, a kontynuujemy dopiero po zakończeniu zadania dla wszystkich elementów?
Po krótkim google niewiele znalazłem o synchronizacji w pythonie, możliwe że po prostu miałem z tym za mało doczynienia i nie potrafię tego odpowiednio nazwać aby znaleźć coś co by mnie tego nauczyło.
Myślałem o wystartowaniu nowych wątków dla każdego wywołania run_command, semaforze kontrolującym ile razy został podniesiony i opuszczony, natomiast nie do końca jestem pewien czy w ogóle myślę w dobrą stronę, stąd pojawia się moja prośba o poradę :)
[Tak, wiem że niektórzy zapewne stwierdzą że nie powinienem pisać skryptów w pythonie tylko w bashu, natomiast takie podejście jest tutaj potrzebne przez składanie i weryfikacje typów napisowych.]