Любое решение будет либо блокировать main (), либо порождать новые потоки, если не процесс.
Наиболее часто используемое решение:
threading.Timer( t, function).start()
Может использоваться рекурсивно,одно простое приложение:
import threading
import time
class Counter():
def __init__(self, increment):
self.next_t = time.time()
self.i=0
self.done=False
self.increment = increment
self.run()
def run(self):
print("hello ", self.i)
self.next_t+=self.increment
self.i+=1
if not self.done:
threading.Timer( self.next_t - time.time(), self.run).start()
def stop(self):
self.done=True
a=Counter(increment = 1)
time.sleep(5)
a.stop()
это решение не будет дрейфовать со временем