Ich würde gerne wissen, wie man eine Zeitverzögerung in ein Python-Skript einfügt.
Wenn Sie einige Bedingungen erfüllen müssen. Es ist besser, threading.Event.wait zu verwenden.
Ich würde gerne wissen, wie man eine Zeitverzögerung in ein Python-Skript einfügt.
Wenn Sie einige Bedingungen erfüllen müssen. Es ist besser, threading.Event.wait zu verwenden.
Nun... es wird weniger häufig gedruckt, weil es Zeit braucht, um zu drucken und alle Puffer zu behandeln, die das mit sich bringt (möglicherweise ein Kernel-Kontextwechsel), und um das Alarmsignal zu registrieren, aber... ja. Ein bisschen weniger als einmal pro Minute.
Bei der Verwendung von tkinter als grafische Benutzeroberfläche wird sleep() die Aufgabe nicht erfüllen - verwenden Sie stattdessen after(): tkinter.Tk.after(yourrootwindow,60000) o yourrootwindow.after(60000)
Sie können die sleep()
Funktion in der time
Modul . Sie kann ein Float-Argument für eine Auflösung im Sekundenbereich annehmen.
from time import sleep
sleep(0.1) # Time in seconds
Wie sieht es mit der zeitlichen Auflösung aus? Besteht z. B. die Gefahr, dass sie ein Vielfaches von 16,66 ms ist (obwohl sie im Beispiel genau 0,1 Sekunde beträgt, also 6 Vielfache von 16,66 ms)? Oder ist z. B. mindestens 1 ms garantiert? Könnte zum Beispiel eine angegebene Verzögerung von 3 ms tatsächlich zu einer Verzögerung von 17 ms führen?
Wie kann ich in Python eine Zeitverzögerung erzeugen?
In einem einzigen Thread schlage ich die Schlaffunktion :
>>> from time import sleep
>>> sleep(4)
Diese Funktion unterbricht die Verarbeitung des Threads, in dem sie vom Betriebssystem aufgerufen wird, so dass andere Threads und Prozesse ausgeführt werden können, während sie schläft.
Verwenden Sie sie zu diesem Zweck oder einfach, um die Ausführung einer Funktion zu verzögern. Zum Beispiel:
>>> def party_time():
... print('hooray!')
...
>>> sleep(3); party_time()
hooray!
"Hurra!" wird 3 Sekunden nach dem Drücken von Enter .
sleep
mit mehreren Threads und ProzessenNochmals, sleep
unterbricht Ihren Thread - er verbraucht so gut wie keine Rechenleistung.
Zur Veranschaulichung erstellen Sie ein Skript wie dieses (ich habe dies zunächst in einer interaktiven Python 3.5-Shell versucht, aber die Unterprozesse können die 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()
Beispielhafte Ausgabe dieses Skripts:
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
Sie können eine Funktion, die zu einem späteren Zeitpunkt in einem separaten Thread aufgerufen werden soll, mit der Option Timer
Einfädeln Objekt:
>>> from threading import Timer
>>> t = Timer(3, party_time, args=None, kwargs=None)
>>> t.start()
>>>
>>> hooray!
>>>
Die leere Zeile veranschaulicht, dass die Funktion auf meine Standardausgabe gedruckt hat, und ich musste auf Enter um sicherzustellen, dass ich eine Eingabeaufforderung erhalten habe.
Der Vorteil dieser Methode ist, dass die Timer
Thread wartete, konnte ich andere Dinge tun, in diesem Fall das Drücken von Enter einmal - bevor die Funktion ausgeführt wird (siehe die erste leere Eingabeaufforderung).
Es gibt kein entsprechendes Objekt in der Multiprozessor-Bibliothek . Sie können einen erstellen, aber er existiert wahrscheinlich aus einem bestimmten Grund nicht. Ein Sub-Thread macht für einen einfachen Timer viel mehr Sinn als ein ganz neuer Subprozess.
Verzögerungen können auch mit den folgenden Methoden realisiert werden.
Die erste Methode:
import time
time.sleep(5) # Delay for 5 seconds.
Die zweite Methode zur Verzögerung wäre die Verwendung der impliziten Wartezeitmethode:
driver.implicitly_wait(5)
Die dritte Methode ist nützlicher, wenn Sie warten müssen, bis eine bestimmte Aktion abgeschlossen ist oder bis ein Element gefunden wurde:
self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))
Es gibt fünf Methoden, die ich kenne: time.sleep()
, pygame.time.wait()
, matplotlib's pyplot.pause()
, .after()
et asyncio.sleep()
.
time.sleep()
Beispiel (nicht verwenden, wenn tkinter verwendet wird):
import time
print('Hello')
time.sleep(5) # Number of seconds
print('Bye')
pygame.time.wait()
Beispiel (nicht empfohlen, wenn Sie nicht das Pygame-Fenster verwenden, aber Sie können das Fenster sofort schließen):
import pygame
# If you are going to use the time module
# don't do "from pygame import *"
pygame.init()
print('Hello')
pygame.time.wait(5000) # Milliseconds
print('Bye')
matplotlibs Funktion pyplot.pause()
Beispiel (nicht empfehlenswert, wenn Sie das Diagramm nicht verwenden, aber Sie könnten das Diagramm sofort beenden):
import matplotlib
print('Hello')
matplotlib.pyplot.pause(5) # Seconds
print('Bye')
Le site .after()
Methode (am besten mit Tkinter):
import tkinter as tk # Tkinter for Python 2
root = tk.Tk()
print('Hello')
def ohhi():
print('Oh, hi!')
root.after(5000, ohhi) # Milliseconds and then a function
print('Bye')
Schließlich ist die asyncio.sleep()
Methode:
import asyncio
asyncio.sleep(5)
driver.implicitly_wait()
ist eine Selenium-Webdriver-Methode, die die Standardwartezeit für die Suche nach Elementen auf einer Webseite festlegt. Sie ist für die gestellte Frage völlig irrelevant.
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?