So fügen Sie Verzögerungen zum Code hinzu

In diesem Tutorial erfahren Sie, wie Sie die Funktion sleep () aus dem integrierten Zeitmodul von Python verwenden, um dem Code Zeitverzögerungen hinzuzufügen.

Wenn Sie ein einfaches Python-Programm ausführen, erfolgt die Codeausführung sequentiell – eine Anweisung nach der anderen – ohne Zeitverzögerung. In einigen Fällen müssen Sie jedoch möglicherweise die Ausführung von Code verzögern. Die Funktion sleep() aus dem in Python integrierten Zeitmodul hilft Ihnen dabei.

In diesem Tutorial lernen Sie die Syntax der Verwendung der Funktion sleep() in Python und mehrere Beispiele kennen, um zu verstehen, wie sie funktioniert. Lass uns anfangen!

Syntax von Python time.sleep()

Das in die Python-Standardbibliothek integrierte Zeitmodul bietet mehrere nützliche zeitbezogene Funktionen. Importieren Sie im ersten Schritt das Zeitmodul in Ihre Arbeitsumgebung:

import time

Da die Funktion sleep() Teil des Zeitmoduls ist, können Sie sie jetzt mit der folgenden allgemeinen Syntax aufrufen und verwenden:

time.sleep(n) 

Hier ist n die Anzahl der Sekunden bis zum Schlafen. Es kann eine Ganzzahl oder eine Fließkommazahl sein.

Manchmal kann die erforderliche Verzögerung einige Millisekunden betragen. In diesen Fällen können Sie die Dauer in Millisekunden in Sekunden umrechnen und im Aufruf der Sleep-Funktion verwenden. Wenn Sie beispielsweise eine Verzögerung von 100 Millisekunden einführen möchten, können Sie sie mit 0,1 Sekunden angeben: time.sleep(0.1).

▶ Sie können auch nur die Sleep-Funktion aus dem Zeitmodul importieren:

from time import sleep

Wenn Sie die obige Methode zum Importieren verwenden, können Sie die Funktion sleep() direkt aufrufen – ohne time.sleep() zu verwenden.

Nachdem Sie nun die Syntax der Python-Funktion sleep() gelernt haben, lassen Sie uns Codebeispiele ausführen, um die Funktion in Aktion zu sehen. Sie können die in diesem Tutorial verwendeten Python-Skripts aus dem Ordner „python-sleep“ in diesem GitHub-Repository herunterladen. 👩🏽‍💻

Codeausführung mit sleep() verzögern

Als erstes Beispiel verwenden wir die Sleep-Funktion, um die Ausführung eines einfachen Python-Programms zu verzögern.

Im folgenden Codeausschnitt:

  • Die erste print()-Anweisung wird ohne Verzögerung ausgeführt.
  • Dann führen wir mit der Funktion sleep() eine Verzögerung von 5 Sekunden ein.
  • Die zweite print()-Anweisung wird erst ausgeführt, nachdem die Sleep-Operation beendet ist.
# /python-sleep/simple_example.py
import time

print("Print now")
time.sleep(5)
print("Print after sleeping for 5 seconds")

Führen Sie nun die Datei simple_example.py aus und beobachten Sie die Ausgabe:

$ python3 simple_example.py

Fügen Sie einem Codeblock verschiedene Verzögerungen hinzu

Im vorherigen Beispiel haben wir eine feste Verzögerung von 5 Sekunden zwischen der Ausführung von zwei print()-Anweisungen eingeführt. Lassen Sie uns als Nächstes ein weiteres Beispiel codieren, um unterschiedliche Verzögerungszeiten einzuführen, wenn eine iterierbare Schleife durchlaufen wird.

In diesem Beispiel möchten wir Folgendes tun:

  • Durchlaufen Sie einen Satz, greifen Sie auf jedes Wort zu und drucken Sie es aus.
  • Nachdem wir jedes Wort ausgedruckt haben, möchten wir eine bestimmte Zeit warten, bevor wir das nächste Wort im Satz ausgeben.

Looping durch eine Reihe von Strings

Betrachten Sie die Zeichenfolge, den Satz. Es ist eine Zeichenfolge, bei der jedes Wort eine Zeichenfolge für sich ist.

Wenn wir die Zeichenfolge durchlaufen, erhalten wir jedes Zeichen wie gezeigt:

>>> sentence = "How long will this take?"
>>> for char in sentence:
...     print(char)

# Output (truncated for readability)
H
o
w
.
.
.
t
a
k
e
?

Aber das wollen wir nicht. Wir möchten den Satz durchlaufen und auf jedes Wort zugreifen. Dazu können wir die Methode split() für die Satzzeichenfolge aufrufen. Dadurch wird eine Liste von Zeichenfolgen zurückgegeben, die durch Aufteilen der Satzzeichenfolge erhalten wird, bei allen Vorkommen von Leerzeichen.

>>> sentence.split()
['How', 'long', 'will', 'this', 'take?']
>>> for word in sentence.split():
...     print(word)

# Output
How
long
will
this
take?

Iterables mit unterschiedlichen Verzögerungen durchlaufen

Betrachten wir das Beispiel noch einmal:

  • Satz ist die Zeichenfolge, die wir durchlaufen möchten, um auf jedes Wort zuzugreifen.
  • delay_times ist die Liste der Verzögerungszeiten, die wir bei jedem Durchgang durch die Schleife als Argument für die Funktion sleep() verwenden.

Hier möchten wir zwei Listen gleichzeitig durchlaufen: die Liste delay_times und die Liste der Strings, die durch Aufteilen des Satzstrings erhalten werden. Sie können die Funktion zip() verwenden, um diese parallele Iteration durchzuführen.

Die Python-Funktion zip(): zip(list1, list2) gibt einen Iterator von Tupeln zurück, wobei jedes Tupel das Element am Index i in list1 und list2 enthält.

# /python-sleep/delay_times.py
import time

sleep_times = [3,4,1.5,2,0.75]
sentence = "How long will this take?"
for sleep_time,word in zip(sleep_times,sentence.split()):
    print(word)
    time.sleep(sleep_time)

Ohne die Sleep-Funktion würde die Steuerung sofort mit der nächsten Iteration fortfahren. Da wir eine Verzögerung eingeführt haben, findet der nächste Durchlauf durch die Schleife erst statt, nachdem die Schlafoperation abgeschlossen ist.

Führen Sie nun delay_times.py aus und beobachten Sie die Ausgabe:

$ python3 delay_times.py

Die nachfolgenden Wörter des Strings werden zeitverzögert ausgedruckt. Die Verzögerung nach dem Ausdrucken des Wortes am Index i in der Zeichenkette ist die Zahl am Index i in der Liste delay_times.

Countdown-Timer in Python

Lassen Sie uns als nächstes Beispiel einen einfachen Countdown-Timer in Python codieren.

Lassen Sie uns eine Funktion countDown() definieren:

# /python-sleep/countdown.py
import time

def countDown(n):
    for i in range(n,-1,-1):
        if i==0:
            print("Ready to go!")
        else:
             print(i)
             time.sleep(1)

Als nächstes analysieren wir die Definition der Funktion countDown():

  • Die Funktion übernimmt eine Zahl n als Argument und zählt von dieser Zahl n ausgehend bis auf Null herunter.
  • Wir verwenden time.sleep(1), um eine Verzögerung von einer Sekunde zwischen den Zählungen zu erreichen.
  • Wenn die Zählung 0 erreicht, druckt die Funktion „Ready to go!“ aus.

🎯 Um die Countdown-Operation zu erreichen, haben wir die Funktion range() mit einem negativen Schrittwert von -1 verwendet. range(n, -1, -1) hilft uns, den Zahlenbereich in n, n – 1, n – 2 usw. bis zu Null zu durchlaufen. Denken Sie daran, dass der Endpunkt standardmäßig ausgeschlossen ist, wenn Sie die Funktion range() verwenden.

Als nächstes fügen wir der Funktion countDown() einen Aufruf mit 5 als Argument hinzu.

countDown(5)

Führen Sie nun das Skript countdown.py aus und sehen Sie sich die countDown-Funktion in Aktion an!

$ python3 countdown.py

Sleep-Funktion im Multithreading

Das Python-Threading-Modul bietet sofort einsatzbereite Multithreading-Funktionen. In Python sorgt der Global Interpreter Lock oder GIL dafür, dass zu jedem Zeitpunkt nur ein aktiver Thread läuft.

Während E/A-Operationen und Warteoperationen, wie beispielsweise Schlaf, kann der Prozessor jedoch die Ausführung des aktuellen Threads aussetzen und zu einem anderen wartenden Thread wechseln.

Um zu verstehen, wie das funktioniert, nehmen wir ein Beispiel.

Erstellen und Ausführen von Threads in Python

Betrachten Sie die folgenden Funktionen func1(), func2() und func3(). Sie durchlaufen eine Reihe von Zahlen und drucken sie aus. Darauf folgt ein Sleep-Vorgang – für eine bestimmte Anzahl von Sekunden – bei jedem Durchlauf durch die Schleife. Wir haben für jede der Funktionen unterschiedliche Verzögerungszeiten verwendet, um besser zu verstehen, wie die Ausführung gleichzeitig zwischen Threads wechselt.

import time

def func1():
    for i in range(5):
        print(f"Running t1, print {i}.")
        time.sleep(2)

def func2():
    for i  in range(5):
         print(f"Running t2, print {i}.")
         time.sleep(1)


def func3():
    for i in range(4):
         print(f"Running t3, print {i}.")
         time.sleep(0.5)

In Python können Sie den Thread()-Konstruktor verwenden, um ein Thread-Objekt zu instanziieren. Mit der Syntax threading.Thread(target = …, args = …) wird ein Thread erstellt, der die Zielfunktion mit dem im args-Tupel angegebenen Argument ausführt.

In diesem Beispiel nehmen die Funktionen func1, func2 und func3 keine Argumente entgegen. Es genügt also, als Ziel nur den Namen der Funktion anzugeben. Dann definieren wir die Thread-Objekte t1, t2 und t3 mit func1, func2 bzw. func3 als Ziele.

t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)

t1.start()
t2.start()
t3.start()

Hier ist der vollständige Code für das Threading-Beispiel:

# /python-sleep/threads.py
import time
import threading

def func1():
    for i in range(5):
        print(f"Running t1, print {i}.")
        time.sleep(2)

def func2():
    for i  in range(5):
         print(f"Running t2, print {i}.")
         time.sleep(1)

def func3():
    for i in range(4):
         print(f"Running t3, print {i}.")
         time.sleep(0.5)

t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)

t1.start()
t2.start()
t3.start()

Beobachten Sie die Ausgabe. Die Ausführung wechselt zwischen den drei Threads. Der Thread t3 hat die niedrigste Wartezeit und wird daher am wenigsten ausgesetzt. Thread t1 hat die längste Schlafdauer von zwei Sekunden, also ist es der letzte Thread, der die Ausführung beendet.

Um mehr zu erfahren, lesen Sie das Tutorial zu den Grundlagen des Multithreading in Python.

Fazit

In diesem Tutorial haben Sie gelernt, wie Sie die sleep()-Funktion von Python verwenden, um dem Code Zeitverzögerungen hinzuzufügen.

Sie können auf die Funktion sleep() über das eingebaute Zeitmodul time.sleep() zugreifen. Um die Ausführung um n Sekunden zu verzögern, verwenden Sie time.sleep(n). Außerdem haben Sie Beispiele für das Verzögern nachfolgender Iterationen in einer Schleife um unterschiedliche Werte, Countdown und Multithreading gesehen.

Sie können jetzt erweiterte Funktionen des Zeitmoduls erkunden. Möchten Sie mit Datums- und Uhrzeitangaben in Python arbeiten? Zusätzlich zum Zeitmodul können Sie die Funktionalität der Datetime- und Kalendermodule nutzen.

Als nächstes lernen Sie, wie man Zeitunterschiede in Python berechnet.⏰