Möchte man eine Schleife Beispielsweise alle 20 Millisekunden ausführen so hat man das Problem, dass man nicht genau weiß wie lang die Ausführungszeit der Schleife ist und wie lang danach gewartet werden muss. Hierzu kann ein Timer verwendet werden. Das kann folgendermaßen aussehen:

import datetime
import time
schleifendauer = 0.02 #Zeit in Sekunden
while (True):
  a = datetime.datetime.now()
  #irgendeincode
  b = datetime.datetime.now()
  c = b-a
  waittime = schleifendauer - c.total_seconds()
  if (waittime > 0):
    time.sleep(waittime)
  else:
    waittime=0
  print ("Zeit gearbeitet: "+str(c.total_seconds())+" Zeit gewartet: "+str(waittime)+" Gesamtzeit: "+str(c.total_seconds()+waittime))

Mit a wird der Zeitpunkt am Anfang und mit b der Zeitpunkt am Ende der Aufgabe definiert. Durch Bildung der Differenz wird die Zeit zwischen den beiden Zeitpunkten ermittelt und von der gewünschten Schleifendauer abgezogen. Die restliche Zeit wird nun gewartet. Sollte die Aufgabe länger gedauert haben als die gewünschte Schleifendauer so wird gar nicht gewartet.


Konnte ich helfen? Ich freue mich über einen Drink! 💙