Chcę uruchomić funkcję co 60 sekund na Pythonie, ale nie chcę być blokowana w międzyczasie.Jak wykonać funkcję asynchronicznie co 60 sekund w Pythonie?
Jak mogę to zrobić asynchronicznie?
import threading
import time
def f():
print("hello world")
threading.Timer(3, f).start()
if __name__ == '__main__':
f()
time.sleep(20)
Za pomocą tego kodu funkcja f jest wykonywana co 3 sekundy w ciągu 20 sekund. Na koniec daje błąd i myślę, że to dlatego, że threading.timer nie został anulowany.
Jak mogę to anulować?
Z góry dziękuję!
Twój program kończy działanie po utworzeniu pierwszego licznika czasu. –
Aby anulować Timer, musisz mieć gdzieś odniesienie i wywołać jego metodę "cancel". –
Należy zauważyć, że wszystkie opublikowane do tej pory rozwiązania cierpią na (małe) skumulowane narastanie błędu. To znaczy, zamiast obliczać następny czas snu w oparciu o ustalony czas rozpoczęcia, po prostu śpią dla "kolejnych 60.". To nigdy nie spać przez mniej niż 60s, i zwykle spać przez nieco więcej niż 60s. Nie zawsze jest to problem, ale jeśli chcesz spać dokładnie 1440 razy dziennie, upewnij się, że zrekompensowałeś ten błąd. –