Wie bringe ich mein Programm dazu, für 50 Millisekunden zu schlafen?

Lesezeit: 4 Minuten

Benutzer-Avatar
TK.

Wie bringe ich mein Python-Programm dazu, für 50 Millisekunden zu schlafen?

Benutzer-Avatar
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

Benutzer-Avatar
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 wenigstens secs‘ seit Python 3.5 laut Dokumentation.

    – Elias Strehle

    30. Oktober 2019 um 14:11 Uhr


Benutzer-Avatar
Dan Olson

Verwenden time.sleep():

import time
time.sleep(50 / 1000)

Siehe die Python-Dokumentation: https://docs.python.org/library/time.html#time.sleep

Benutzer-Avatar
Lukas Urban

Es gibt ein Modul namens „Zeit“, das Ihnen helfen kann. Ich kenne zwei Wege:

  1. 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")
    
  2. 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
    

Benutzer-Avatar
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


Benutzer-Avatar
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


1132810cookie-checkWie bringe ich mein Programm dazu, für 50 Millisekunden zu schlafen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy