Próbuję uruchomić trzy funkcje (każda może wykonać do 1 sekundy, aby wykonać) co sekundę. Chciałbym wtedy przechowywać dane wyjściowe z każdej funkcji i zapisać je w osobnych plikach.Uruchamiaj wiele funkcji co sekundę, zapisuj wyniki do pliku
W tej chwili używam Timer
do obsługi opóźnienia. (Mogę podklasy Thread
, ale to już trochę skomplikowane dla tego prostego skryptu)
def main:
for i in range(3):
set_up_function(i)
t = Timer(1, run_function, [i])
t.start()
time.sleep(100) # Without this, main thread exits
def run_function(i):
t = Timer(1, run_function, [i])
t.start()
print function_with_delay(i)
Jaki jest najlepszy sposób obsłużyć wyjście z function_with_delay? Dołącz wynik do globalnej listy dla każdej funkcji?
Wtedy mógłbym umieścić coś takiego na koniec mojego Główną funkcją:
...
while True:
time.sleep(30) # or in a try/except with a loop of 1 second sleeps so I can interrupt
for i in range(3):
save_to_disk(data[i])
Myśli?
Edycja: Dodano własną odpowiedź jako możliwość
+1 Działa to, ponieważ wyjście służy do oddzielania plików. Jeśli nie było to trywialne i wiązało się z kombinacją wyników, to przed rozpoczęciem pisania trzeba było poczekać, aż wszystkie pozycje w kolejce zakończą się. Upewnij się, że wywołasz 'task_done' na elementach, które otrzymujesz. – darvids0n
Świetny pomysł! Kolejka jest wątkowo bezpieczna i jest znacznie ładniejsza niż list.append (dane) –
Dodałem wywołanie 'task_done' zgodnie z sugestią darvids0n. Dzięki. – srgerg