@locky20: Die Erklärung kann ich nicht nachvollziehen. Weder liest sich das einfacher noch lässt sich da etwas leichter vergleichen. Das hat auch nie einen Compiler gesehen, denn an dem kommt es nicht vorbei — da ist eine Zeile die wohl einfach nur eine Kopie einer anderen Zeile sein sollte, die aber syntaktisch nicht hin haut. Und auch die Zeile danach ist syntaktisch nicht richtig.
Dann ist mir echt ein Rätsel was `dastestamp` wohl bedeuten mag, und was `foo` in der Funktion machen soll.
`datetime.now()` wird viel zu oft aufgerufen. Da entstehen Zeiten die so dann überhaupt gar nicht mehr zusammenpassen.
`strftime()` wird zweimal fälschlicherweise auf der `datetime.date`-Klasse als Funktion aufgerufen statt die Methode auf dem Objekt zu verwenden, dass dort übergeben wird.
Die beiden `int()`-Aufrufe sind unnötig.
Das `time.sleep()` ist ein Problem weil das nicht exakt die angegebene Zeit wartet, sondern auch etwas weniger oder etwas mehr warten kann. In je mehr kleinere Wartestückchen man die Zeit einteilt um so öfter wird es aufgerufen und um so mehr kleine Fehler können sich aufsummieren.
`future_date` ist mehr als ein Datum, der Name also nicht so ganz treffend.
Hier mal ohne den Unsinn alles immer in Zeichenketten umzuwandeln (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import time
from datetime import datetime as DateTime, timedelta as TimeDelta
#
# TODO Sinnvollen Funktionsnamen finden.
#
def new_foo(delay):
delta = TimeDelta(seconds=delay)
future_timestamp = DateTime.now().replace(microsecond=0) + delta
while True:
now = DateTime.now()
if now >= future_timestamp:
print(
f"Not reached:\n{now:%Y-%d-%m %H:%M:%S} {future_timestamp}\n\n"
)
#
# FIXME Das hier ist ein Problem weil sich die Ungenauigkeiten
# dieser Funktion aufaddieren.
#
time.sleep(1)
else:
print("reached...")
previous_future_timestamp = future_timestamp
future_timestamp = previous_future_timestamp + delta
print(
f"Unendliche Geschichte geht weiter:"
f" {future_timestamp} -- {previous_future_timestamp}"
)
if __name__ == "__main__":
new_foo(60)
Bei der Ausgabe mit der unendlichen Geschichte denke ich mal das die Reihenfolge der Ausgabe falsch ist. Was man viel besser sieht wenn man die Namen aussagekräftig gewählt hat.