Wie bringe ich mein Python-Programm dazu, für 50 Millisekunden zu schlafen?
Wie bringe ich mein Programm dazu, für 50 Millisekunden zu schlafen?
TK.
Will Boyce
Verwenden time.sleep()
from time import sleep
sleep(0.05)
-
Aber wie geht das eigentlich Arbeit? Wird die tatsächliche Zeitauflösung beispielsweise oft 16,66 ms (1/60 Sekunde) betragen? In diesem speziellen Fall ist die Schlafzeit zufällig exakt 3-fache Zeitauflösung. Aber was ist mit dem Runden? Was ist, wenn 3 aufgrund von Gleitkommaoperationen tatsächlich 2,9999999 ist und auf 2 abgerundet wird (tatsächliche Ruhezeit = 0,0333333 s = 33,33 ms)?
– Peter Mortensen
6. Februar 2021 um 23:01 Uhr
-
Es ist äußerst unwahrscheinlich, dass die Python-Codebasis sleep(0.05) auf 2 Systemtakte rundet. Es wird höchstwahrscheinlich 3 Uhr-Ticks anfordern, weil das die richtige Antwort ist. ABER das System kehrt möglicherweise nach 3 oder 4 oder 5 oder 100 Takten zurück. Es gibt keine Garantie, dass es nach 3 Takten zurückkehrt, wenn es damit beschäftigt ist, etwas anderes zu tun, z. B. Daten auf die Festplatte zu leeren. Verwenden Sie dies auf keinen Fall, wenn das Timing kritisch ist. Sie müssten Code auf Treiberebene schreiben, um Interrupts zu nutzen, wenn Sie supergenaue Ruheintervalle wünschen.
– Mark Lakata
3. März um 1:11
ja23
Beachten Sie, dass, wenn Sie sich auf die Einnahme von Schlaf verlassen exakt 50 ms, das kriegst du nicht hin. Es wird nur darum gehen.
-
Auf einigen Plattformen kann es 10 oder 15 ms länger dauern, seien Sie also gewarnt.
– Kylotan
17. Januar 2009 um 18:41 Uhr
-
Handelt es sich um eine konsistente Verzögerung auf einem bestimmten System?
– Benutzer391339
18. Februar 2018 um 22:00 Uhr
-
@ user391339 Aus Erfahrung ist es nicht konsistent. Thread-/Prozesspriorität, durchschnittliche CPU-Auslastung, verfügbarer Arbeitsspeicher und eine Fülle anderer Faktoren machen alle Aufrufe ungenau. Je ausgelasteter das System ist, desto höher ist die Ungenauigkeit.
– David
28. Januar 2019 um 18:44 Uhr
-
Es könnte jedoch interessant sein zu wissen, dass „die Funktion [
time.sleep(secs)
] schläft wenigstenssecs
‘ seit Python 3.5 laut Dokumentation.– Elias Strehle
30. Oktober 2019 um 14:11 Uhr
Dan Olson
Verwenden time.sleep()
:
import time
time.sleep(50 / 1000)
Siehe die Python-Dokumentation: https://docs.python.org/library/time.html#time.sleep
Lukas Urban
Es gibt ein Modul namens „Zeit“, das Ihnen helfen kann. Ich kenne zwei Wege:
-
sleep
Schlafen (Hinweis) fordert das Programm auf, zu warten und dann den Rest des Codes auszuführen.
Es gibt zwei Möglichkeiten, Schlaf zu verwenden:
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")
Die zweite Möglichkeit importiert nicht das gesamte Modul, sondern schläft nur.
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 der Zeit seitdem Unix-Zeit.
Diese Methode ist nützlich, wenn Sie eine Schleife ausführen müssen. Aber dieser ist 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
Abu Noman Md Sakib
Sie können dies auch tun, indem Sie die verwenden Timer()
Funktion.
Code:
from threading import Timer
def hello():
print("Hello")
t = Timer(0.05, hello)
t.start() # After 0.05 seconds, "Hello" will be printed
-
Wie funktioniert es eigentlich Arbeit für Schlaf unter einer Sekunde? Häufig haben Timer eine zeitliche Auflösung von 16,66 ms.
– Peter Mortensen
6. Februar 2021 um 23:08 Uhr
Peter Mortensen
Sie können pyautogui auch verwenden als:
import pyautogui
pyautogui._autoPause(0.05, False)
Wenn das erste Argument nicht None ist, wird es für die Sekunden des ersten Arguments angehalten, in diesem Beispiel: 0,05 Sekunden
Wenn das erste Argument None und das zweite Argument True ist, dann wird es für die globale Pauseneinstellung schlafen, die eingestellt ist mit:
pyautogui.PAUSE = int
Wenn Sie sich über den Grund wundern, sehen Sie sich den Quellcode an:
def _autoPause(pause, _pause):
"""If `pause` is not `None`, then sleep for `pause` seconds.
If `_pause` is `True`, then sleep for `PAUSE` seconds (the global pause setting).
This function is called at the end of all of PyAutoGUI's mouse and keyboard functions. Normally, `_pause`
is set to `True` to add a short sleep so that the user can engage the failsafe. By default, this sleep
is as long as `PAUSE` settings. However, this can be override by setting `pause`, in which case the sleep
is as long as `pause` seconds.
"""
if pause is not None:
time.sleep(pause)
elif _pause:
assert isinstance(PAUSE, int) or isinstance(PAUSE, float)
time.sleep(PAUSE)
-
Wie funktioniert es eigentlich Arbeit für Schlaf unter einer Sekunde? Häufig haben Timer eine zeitliche Auflösung von 16,66 ms.
– Peter Mortensen
6. Februar 2021 um 23:08 Uhr