Frage Wie kann ich eine zeitliche Verzögerung in Python machen?


Ich würde gerne wissen, wie man ein Python-Skript zeitlich verzögert.


2026
2018-02-04 07:04


Ursprung


Antworten:


import time
time.sleep(5)   # Delays for 5 seconds. You can also use a float value.

Hier ist ein weiteres Beispiel, wo etwas ungefähr einmal pro Minute ausgeführt wird:

import time
while True:
    print("This prints once a minute.")
    time.sleep(60) # Delay for 1 minute (60 seconds).

2254
2018-02-04 07:05



Du kannst den ... benutzen sleep() Funktion im Zeitmodul. Es kann ein Float-Argument für eine Subsekunden-Auflösung benötigen.

from time import sleep
sleep(0.1) # Time in seconds.

564
2017-09-15 16:34



Bitte lesen Sie https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378, die dir weiterhelfen können:

Probieren Sie die Schlaffunktion im Zeitmodul aus.

import time
time.sleep(60)

Und leg das in a while Schleife und eine Anweisung wird nur auf dem ausgeführt   Minute ... Damit können Sie eine Anweisung in vordefinierten Intervallen ausführen   unabhängig davon, wie lange der Befehl dauert (solange es weniger als   eine Minute oder 5 oder 60 oder was auch immer Sie es setzen) Zum Beispiel wollte ich   Führen Sie einmal pro Minute einen Ping aus. Wenn ich nur time.sleep(60) oder time.sleep(45)    Sogar der Ping wird nicht immer die gleiche Zeit dauern. Hier ist die   Code :)

time.sleep(time.localtime(time.time())[5])

Das [5] zieht nur die Sekunden aus der time.localtime()Rückkehr   Wert.

Das Tolle daran time.sleep ist, dass es Fließkomma unterstützt   Zahlen!

import time
time.sleep(0.1) 

http://python.org/doc/current/lib/module-time.html


118
2018-02-04 07:07



Sie können es erhalten, indem Sie einfach Folgendes tun:

from time import sleep

# Doing stuff
sleep(0.5) # Sleeping half a second (sleep() uses seconds, but you can also use floats)
# Doing stuff...

55
2018-01-18 18:48



Ein bisschen Spaß mit einem schläfrigen Generator.

Die Frage betrifft die Zeitverzögerung. Es kann eine feste Zeit sein, aber in einigen Fällen benötigen wir möglicherweise eine seit dem letzten Mal gemessene Verzögerung. Hier ist eine mögliche Lösung:

Verzögerung seit dem letzten Mal gemessen (regelmäßig aufwachen)

Die Situation kann sein, wir wollen so regelmäßig wie möglich etwas machen und wir wollen uns nicht mit all dem beschäftigen last_time, next_time Sachen rund um unseren Code.

Summergenerator

Der folgende Code (sleepy.py) definiert a buzzergen Generator:

import time
from itertools import count

def buzzergen(period):
    nexttime = time.time() + period
    for i in count():
        now = time.time()
        tosleep = nexttime - now
        if tosleep > 0:
            time.sleep(tosleep)
            nexttime += period
        else:
            nexttime = now + period
        yield i, nexttime

Regelmäßig buzzergen aufrufen

from sleepy import buzzergen
import time
buzzer = buzzergen(3) # Planning to wake up each 3 seconds
print time.time()
buzzer.next()
print time.time()
time.sleep(2)
buzzer.next()
print time.time()
time.sleep(5) # Sleeping a bit longer than usually
buzzer.next()
print time.time()
buzzer.next()
print time.time()

Und wenn wir es laufen sehen wir:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Wir können es auch direkt in einer Schleife verwenden:

import random
for ring in buzzergen(3):
    print "now", time.time()
    print "ring", ring
    time.sleep(random.choice([0, 2, 4, 6]))

Und wenn wir es laufen lassen, sehen wir vielleicht:

now 1400102751.46
ring (0, 1400102754.461676)
now 1400102754.46
ring (1, 1400102757.461676)
now 1400102757.46
ring (2, 1400102760.461676)
now 1400102760.46
ring (3, 1400102763.461676)
now 1400102766.47
ring (4, 1400102769.47115)
now 1400102769.47
ring (5, 1400102772.47115)
now 1400102772.47
ring (6, 1400102775.47115)
now 1400102775.47
ring (7, 1400102778.47115)

Wie wir sehen, ist dieser Summer nicht zu starr und erlaubt es uns, regelmäßige Schlafintervalle einzuholen, selbst wenn wir verschlafen und aus dem regulären Zeitplan aussteigen.


33
2018-05-14 21:30



Wie kann ich eine zeitliche Verzögerung in Python machen?

In einem einzigen Thread schlage ich die Schlaffunktion vor:

>>> from time import sleep

>>> sleep(4)

Dadurch wird die Verarbeitung des Threads, in dem es vom Betriebssystem aufgerufen wird, unterbrochen, sodass andere Threads und Prozesse ausgeführt werden können, während sie inaktiv sind.

Verwenden Sie es für diesen Zweck, oder einfach um die Ausführung einer Funktion zu verzögern. Beispielsweise:

>>> def party_time():
...     print('hooray!')
... 
>>> sleep(3); party_time()
hooray!

"Hurra!" gedruckt 3 Sekunden nach dem Treffer Eingeben.

Beispiel mit sleep mit mehreren Threads und Prozessen

Nochmal, sleep unterbricht den Thread - es verwendet fast keine Verarbeitungsleistung.

Um dies zu demonstrieren, erstellen Sie ein Skript wie dieses (Ich habe das zuerst in einer interaktiven Python 3.5-Shell versucht, aber Unterprozesse können das nicht finden party_later Funktion aus irgendeinem Grund):

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from time import sleep, time

def party_later(kind='', n=''):
    sleep(3)
    return kind + n + ' party time!: ' + __name__

def main():
    with ProcessPoolExecutor() as proc_executor:
        with ThreadPoolExecutor() as thread_executor:
            start_time = time()
            proc_future1 = proc_executor.submit(party_later, kind='proc', n='1')
            proc_future2 = proc_executor.submit(party_later, kind='proc', n='2')
            thread_future1 = thread_executor.submit(party_later, kind='thread', n='1')
            thread_future2 = thread_executor.submit(party_later, kind='thread', n='2')
            for f in as_completed([
              proc_future1, proc_future2, thread_future1, thread_future2,]):
                print(f.result())
            end_time = time()
    print('total time to execute four 3-sec functions:', end_time - start_time)

if __name__ == '__main__':
    main()

Beispielausgabe von diesem Skript:

thread1 party time!: __main__
thread2 party time!: __main__
proc1 party time!: __mp_main__
proc2 party time!: __mp_main__
total time to execute four 3-sec functions: 3.4519670009613037

Multithreading

Sie können eine Funktion auslösen, die zu einem späteren Zeitpunkt in einem separaten Thread mit dem aufgerufen wird TimerEinfädelobjekt:

>>> from threading import Timer
>>> t = Timer(3, party_time, args=None, kwargs=None)
>>> t.start()
>>>
>>> hooray!

>>> 

Die Leerzeile verdeutlicht, dass die Funktion nach meinem Standard ausgedruckt und ich getroffen werden musste Eingeben um sicherzustellen, dass ich eine Eingabeaufforderung hatte.

Der Vorteil dieser Methode ist, dass während der Timer Thread wartete, ich konnte andere Dinge tun, in diesem Fall schlagen Eingeben einmal - bevor die Funktion ausgeführt wurde (siehe die erste leere Eingabeaufforderung).

In der Multiprocessing-Bibliothek befindet sich kein entsprechendes Objekt. Sie können einen erstellen, aber wahrscheinlich gibt es ihn nicht. Ein Unter-Thread ist für einen einfachen Timer viel sinnvoller als ein ganz neuer Unterprozess.


21
2018-06-21 03:25



Die tkinter-Bibliothek in der Python-Standardbibliothek ist ein interaktives Werkzeug, das Sie importieren können. Im Grunde können Sie Buttons und Boxen und Popups erstellen, die als Fenster angezeigt werden, die Sie mit Code bearbeiten.

Wenn Sie tkinter verwenden, nicht verwenden TIME.SLEEP() weil es dein Programm verdirbt. Das ist mir passiert. Verwenden Sie stattdessen root.after() und ersetze die Werte für so viele Sekunden mit Millisekunden. Z.B, time.sleep(1) ist äquivalent zu root.after(1000) in tkinter.

Andernfalls, time.sleep(), worauf viele Antworten hingewiesen haben, und das ist der richtige Weg.


20
2018-02-28 19:45