Witam,
potrzebuje podpowiedzi...jak wykonywać traceroute równolegle do np.10 serwisów ? chce żeby każda funkcja kończyła swoje działanie w momencie gdy otrzyma odpowiedz i kończąc swoje działanie dodawała owa odpowiedz do globalnej zmiennej obiektu tablicowego, na której będzie można dalej przetwarzać zwrócone informacje.
Sam threading.Thread działa genialnie, dokładnie tak jak chce, ale nic mi z tego skoro nie mogę przetworzyć zwróconych danych:/. Poniżej to co zrobilem
url = ["www.google.com", "www.se.pl", "www.fakt.pl"]
def tracert(domainName):
array = subprocess.check_output(("traceroute", "{}".format(domainName)))
return array
process =[]
for iUrl in url:
process.append(threading.Thread(target=tracert, args=[iUrl]))
for procStart in process:
procStart.start()
for procJoin in process:
procJoin.join()
Widziałem ze mechanizm muliprocessing.Pool działa podobnie, ale na razie nie mogę tego okiełznać :/. Niby dzięki temu funkcja zwraca wartość, ale nie działa to już z taka szybkością jak Thread, a wręcz przeciwnie , nie działa równolegle, a czeka aż pierwsze wywołanie zwróci wartość, a dopiero później zaczyna następne
Dodam, ze system operacyjny to Debian 4.19.20
pypy
, mamy pełny paralellizm w Pythonie:) Amultiprocessinng = futures.ProcessPoolExecutor
.Shalomfutures
, ło panie, ale to jakiś py3, kto by tego używał :P a odpalenie wielu procesów to i tak plus mimo wszystko, np. jeśli masz interpreter 32bit i trzyma cię jakiś limit pamięci per proces, albo nie ufasz że OS zaalokuje wszystkie zasoby dla wątków jednego procesu