Ich würde gerne wissen, wie man eine Zeitverzögerung in ein Python-Skript einfügt.
Dies ist im Grunde ein Mini-Tutorial über Importe, nach denen der Auftraggeber nie gefragt hat. Diese Antwort könnte ersetzt werden durch "use time.sleep()
"
Ich würde gerne wissen, wie man eine Zeitverzögerung in ein Python-Skript einfügt.
Ein bisschen Spaß mit einem verschlafenen Generator .
Die Frage bezieht sich auf die Zeitverzögerung. Es kann eine feste Zeit sein, aber in einigen Fällen brauchen wir vielleicht eine Verzögerung, die seit dem letzten Mal gemessen wird. Hier ist eine mögliche Lösung:
Die Situation kann so aussehen, dass wir etwas so regelmäßig wie möglich machen wollen und uns nicht mit den ganzen last_time
, next_time
Sachen rund um unseren Code.
Der folgende Code ( schläfrig.py ) definiert eine 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
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 wir sehen, wie es läuft:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Wir können sie 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 sie laufen lassen, werden wir sehen:
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 Buzzer nicht zu starr und ermöglicht es uns, regelmäßige Schlafintervalle einzuhalten, selbst wenn wir verschlafen und aus dem regelmäßigen Zeitplan geraten.
Le site Tkinter Bibliothek in der Python-Standardbibliothek ist ein interaktives Werkzeug, das Sie importieren können. Im Grunde kann man damit Schaltflächen, Boxen, Popups und andere Dinge erstellen, die als Fenster erscheinen und die man mit Code manipulieren kann.
Wenn Sie Tkinter verwenden, nicht verwenden time.sleep()
denn das würde Ihr Programm durcheinander bringen. Das ist mir passiert. Verwenden Sie stattdessen root.after()
und ersetzen Sie die Werte für wie viele Sekunden auch immer, durch Millisekunden. Zum Beispiel, time.sleep(1)
ist gleichbedeutend mit root.after(1000)
in Tkinter.
Ansonsten, time.sleep()
Das ist der richtige Weg, wie viele Antworten gezeigt haben.
Verzögerungen werden mit dem Zeitbibliothek insbesondere die time.sleep()
Funktion.
Einfach eine Sekunde warten lassen:
from time import sleep
sleep(1)
Das funktioniert, weil wir es tun:
from time import sleep
Sie extrahieren die Schlaffunktion nur von der Zeitbibliothek was bedeutet, dass Sie es einfach mit aufrufen können:
sleep(seconds)
Anstatt abtippen zu müssen
time.sleep()
Das ist unangenehm lang zu tippen.
Mit dieser Methode haben Sie keinen Zugang zu den anderen Funktionen der Zeitbibliothek und Sie können keine Variable namens sleep
. Sie könnten jedoch eine Variable mit dem Namen time
.
Tun from [library] import [function] (, [function2])
ist ideal, wenn Sie nur bestimmte Teile eines Moduls benötigen.
Man könnte es auch so machen:
import time
time.sleep(1)
und Sie hätten Zugang zu den anderen Funktionen des Zeitbibliothek como time.clock()
so lange Sie time.[function]()
aber Sie konnten die Variable time nicht erstellen, weil sie den Import überschreiben würde. Eine Lösung für dieses Problem ist
import time as t
was es Ihnen ermöglichen würde, auf die Zeitbibliothek como t
und ermöglicht es Ihnen zu tun:
t.sleep()
Dies funktioniert mit jeder Bibliothek.
Verwenden Sie time.sleep
ou Event().wait
así:
from threading import Event
from time import sleep
delay_in_sec = 2
# Use time.sleep like this
sleep(delay_in_sec) # Returns None
print(f'slept for {delay_in_sec} seconds')
# Or use Event().wait like this
Event().wait(delay_in_sec) # Returns False
print(f'waited for {delay_in_sec} seconds')
Verwenden Sie threading.Timer
así:
from threading import Timer
delay_in_sec = 2
def hello(delay_in_sec):
print(f'function called after {delay_in_sec} seconds')
t = Timer(delay_in_sec, hello, [delay_in_sec]) # Hello function will be called 2 seconds later with [delay_in_sec] as the *args parameter
t.start() # Returns None
print("Started")
Ausgänge:
Started
function called after 2 seconds
timer_obj.cancel()
.Beachten Sie, dass Sie in neueren Python-Versionen (Python 3.4 oder höher) die Funktion asyncio.sleep
. Es geht um asynchrone Programmierung und Asyncio. Sehen Sie sich das nächste Beispiel an:
import asyncio
from datetime import datetime
@asyncio.coroutine
def countdown(iteration_name, countdown_sec):
"""
Just count for some countdown_sec seconds and do nothing else
"""
while countdown_sec > 0:
print(f'{iteration_name} iterates: {countdown_sec} seconds')
yield from asyncio.sleep(1)
countdown_sec -= 1
loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(countdown('First Count', 2)),
asyncio.ensure_future(countdown('Second Count', 3))]
start_time = datetime.utcnow()
# Run both methods. How much time will both run...?
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
print(f'total running time: {datetime.utcnow() - start_time}')
Man könnte meinen, dass die erste Methode 2 Sekunden lang "schläft" und die zweite Methode 3 Sekunden, also insgesamt 5 Sekunden Laufzeit. Aber es wird gedruckt:
total_running_time: 0:00:03.01286
Es wird empfohlen zu lesen offizielle asyncio-Dokumentation für weitere Einzelheiten.
Versuchen Sie ein ähnliches Beispiel mit time.sleep
. Sie werden nicht die gleichen Ergebnisse bei der Laufzeit erhalten. Empfehlen Sie zu lesen über asynchronous
programmieren in python
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.
14 Stimmen
Mögliches Duplikat von Wie bringe ich mein Python-Programm dazu, 50 Millisekunden lang zu schlafen?