Ich war auch schon in einer Situation, in der ich mir diese Frage stellen musste. In meinem Fall musste mein Faden für eine lange Zeit (Tage, Monate) schlafen. Wie matt antwortete mit der interessanten Tatsache, dass es eine Grenze gibt. in seinem und meinem System ist die Grenze 4.29Million secs +
und verschiedene System hat verschiedene Grenzen, wie jemand in Mats Antwort Kommentar sagte Repl.it hat größere Grenze.
Wie auch immer, schließlich sind wir darauf beschränkt, aber ich habe eine Lösung gefunden, die darin besteht, die Sekunden in Stücke zu unterteilen mit einem max_sleep_secs
und dann in einer Schleife durch diese Chunks-Liste und Sleep.
import time
def sweet_dreams(secs: float):
DEBUG = False
max_sleep_secs = 1000000
secs_extra_ms = 0
if secs > max_sleep_secs:
if type(secs) is float:
secs_extra_ms = str(secs).split('.')[-1]
if secs_extra_ms:
secs_extra_ms = secs_extra_ms.lstrip('0')
secs_extra_ms = float(f"0.{secs_extra_ms}")
secs = int(secs)
secs_divide = float(secs) / max_sleep_secs # e.g: 2.4123
secs_int = int(secs_divide) # e.g: 2
secs_decimal_remainder = int(str(secs_divide).split(".")[-1]) # e.g 4123
chunks = [max_sleep_secs for _ in range(secs_int)]
if secs_decimal_remainder:
chunks.append(int(str(secs_decimal_remainder).lstrip('0')))
if secs_extra_ms:
chunks.append(secs_extra_ms)
if DEBUG:
print(f"Debug [sweet_dreams]: -> Total: {secs} | Max: {max_sleep_secs} | Chunks: {chunks}")
quit()
for seconds in chunks:
time.sleep(seconds)
else:
if DEBUG:
print(f"Debug [sweet_dreams]: -> Total: {secs} | Max: {max_sleep_secs} | Chunks: None")
quit()
time.sleep(secs)
0 Stimmen
Meine Vermutung ist, dass es plattformspezifisch ist, aber ich habe nicht genug Wissen, um etwas zu beweisen.
4 Stimmen
Ja, es gibt eine Obergrenze: Wenn jemand über das Stromkabel Ihrer Maschine stolpert ;-)
4 Stimmen
Welches "Problem" haben Sie? Seien Sie konkret.