Voglio eseguire una funzione ogni 60 secondi su Python ma non voglio essere bloccato nel frattempo.Come eseguire una funzione in modo asincrono ogni 60 secondi in Python?
Come posso farlo in modo asincrono?
import threading
import time
def f():
print("hello world")
threading.Timer(3, f).start()
if __name__ == '__main__':
f()
time.sleep(20)
Con questo codice, la funzione f viene eseguita ogni 3 secondi entro i 20 secondi di tempo. Alla fine dà un errore e penso che sia perché il threading.timer non è stato cancellato.
Come posso annullarlo?
Grazie in anticipo!
Il programma termina dopo aver spawnato il primo timer. –
Per cancellare il Timer è necessario mantenere un riferimento ad esso da qualche parte, e chiamare il suo metodo 'cancel'. –
Si noti che tutte le soluzioni pubblicate fino ad ora soffrono di un (piccolo) accumulo cumulativo di errori. Cioè, piuttosto che calcolare la durata del sonno successivo in base a un orario di partenza fisso, semplicemente dormono per "altri 60 secondi". Questo non dormirà mai per meno di 60 anni e di solito dormirà per poco più di 60 secondi. Questo non è sempre un problema, ma se vuoi dormire esattamente 1440 volte al giorno, assicurati di compensare questo errore. –