Wie bringe ich mein Python-Programm dazu, 50 Millisekunden lang zu schlafen?
@CsabaToth Solange Sie eine Python-Implementierung haben, die den Anforderungen Ihres Betriebssystems entspricht, ist das oben Genannte unabhängig vom Betriebssystem.
Wie bringe ich mein Python-Programm dazu, 50 Millisekunden lang zu schlafen?
Utilice time.sleep()
from time import sleep
sleep(0.05)
@CsabaToth Solange Sie eine Python-Implementierung haben, die den Anforderungen Ihres Betriebssystems entspricht, ist das oben Genannte unabhängig vom Betriebssystem.
Aber wie kann sie eigentlich arbeiten? Wird die tatsächliche Zeitauflösung z. B. oft 16,66 ms (1/60 Sekunde) betragen? In diesem speziellen Fall beträgt die Schlafzeit zufällig genau 3-fache Zeitauflösung. Aber was ist mit der Rundung? Was ist, wenn 3 aufgrund von Gleitkommaoperationen eigentlich 2,9999999 ist und auf 2 abgerundet wird (tatsächliche Schlafzeit = 0,0333333 s = 33,33 ms)?
Es ist äußerst unwahrscheinlich, dass die Python-Codebasis sleep(0.05) auf 2 Systemuhrticks runden wird. Sie wird höchstwahrscheinlich 3 Ticks verlangen, weil das die richtige Antwort ist. ABER das System könnte nach 3 oder 4 oder 5 oder 100 Ticks zurückkehren. Es gibt keine Garantie dafür, dass es nach 3 Ticks zurückkehrt, wenn es mit etwas anderem beschäftigt ist, z. B. mit dem Flushen von Daten auf die Festplatte. Verwenden Sie dies auf keinen Fall, wenn das Timing kritisch ist. Sie müssten Code auf der Treiberebene schreiben, um Interrupts zu nutzen, wenn Sie supergenaue Sleep-Intervalle wollen.
@user391339 Erfahrungsgemäß ist es nicht konsistent. Thread-/Prozesspriorität, durchschnittliche CPU-Last, verfügbarer Speicher und eine Fülle anderer Faktoren machen alle Aufrufe ungenau. Je stärker das System ausgelastet ist, desto höher ist die Ungenauigkeit.
Utilice time.sleep()
:
import time
time.sleep(50 / 1000)
Siehe die Python-Dokumentation: https://docs.python.org/library/time.html#time.sleep
Es gibt ein Modul namens "Zeit", das Ihnen helfen kann. Ich kenne zwei Möglichkeiten:
sleep
Schlaf ( Referenz ) bittet das Programm zu warten und dann den Rest des Codes auszuführen.
Es gibt zwei Möglichkeiten, den Schlaf zu nutzen:
import time # Import whole time module
print("0.00 seconds")
time.sleep(0.05) # 50 milliseconds... make sure you put time. if you import time!
print("0.05 seconds")
Bei der zweiten Möglichkeit wird nicht das gesamte Modul importiert, sondern nur der Schlaf.
from time import sleep # Just the sleep function from module time
print("0.00 sec")
sleep(0.05) # Don't put time. this time, as it will be confused. You did
# not import the whole module
print("0.05 sec")
Mit Zeit seit Unix-Zeit .
Dieser Weg ist nützlich, wenn Sie eine Schleife laufen lassen wollen. Allerdings ist dieser Weg etwas komplexer.
time_not_passed = True
from time import time # You can import the whole module like last time. Just don't forget the time. before to signal it.
init_time = time() # Or time.time() if whole module imported
print("0.00 secs")
while True: # Init loop
if init_time + 0.05 <= time() and time_not_passed: # Time not passed variable is important as we want this to run once. !!! time.time() if whole module imported :O
print("0.05 secs")
time_not_passed = False
Es wird nicht empfohlen, Folgendes zu verwenden time.time()
zur Messung der verstrichenen Zeit. Es ist besser, zu verwenden time.monotonic()
die garantiert gleichmäßig ansteigen wird. Es gibt tatsächlich Fälle, in denen time()
kann sich durch Sprünge ändern, z. B. wegen Schaltsekunden. time.monotonic()
steht in keinem absoluten Zusammenhang mit der Linux-Epochenzeit, wird aber normalerweise beim Hochfahren des Systems auf 0 gesetzt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.