Zum Hauptinhalt springen

Erstellen einer Verzögerung in Python: Eine einfache Möglichkeit, auf die Ausführung eines Programms zu warten

Die Verzögerung ist eine sehr nützliche Funktion in der Programmierung, mit der Sie die Codeausführung vorübergehend für einen bestimmten Zeitraum stoppen können. In Python ist eine der häufigsten Methoden zum Erstellen einer Verzögerung die Verwendung der Time-Funktion.sleep(). Es gibt jedoch andere Möglichkeiten, die Verwendung dieser Funktion zu vermeiden und gleichzeitig das gleiche Ergebnis zu erzielen.

Eine solche Methode ist die Verwendung der integrierten Time-Funktion.perf_counter(). Es gibt die aktuelle Anzahl von Sekunden seit dem Start des Programms zurück. Durch Vergleichen von time-Werten.perf_counter() es ist möglich, eine künstliche Verzögerung zu erzeugen. Darüber hinaus ermöglicht diese Methode die Erstellung von Verzögerungen mit höherer Genauigkeit als die time-Funktion.sleep().

So erstellen Sie eine Verzögerung mit der Time-Funktion.perf_counter() Sie müssen den aktuellen Wert der Funktion vor Beginn der Verzögerung in eine Variable schreiben und dann prüfen, ob die gewünschte Anzahl von Sekunden erreicht ist. In diesem Fall wird die while-Schleife ausgeführt, bis die Verzögerung abgeschlossen ist.

Wie erstelle ich eine Verzögerung in Python ohne time.sleep()

In Python gibt es mehrere Möglichkeiten, eine Verzögerung im Code zu erstellen, ohne die time-Funktion zu verwenden.sleep() . Diese Methoden vermeiden das Blockieren des Ausführungsthreads und können in verschiedenen Fällen nützlich sein.

    Verwenden der Time-Funktion.monotonic() Time-Funktion.monotonic() gibt die aktuelle Zeit in Sekunden zurück, die seit einem beliebigen Moment verstrichen sind. Die Methode ist besonders nützlich, wenn eine genaue Echtzeit-Verzögerung erforderlich ist. Hier ist ein Beispiel für die Verwendung:

import timestart_time = time.monotonic()while time.monotonic() - start_time < 5:# Код, который будет выполняться в течение пяти секунд
import timestart_time = time.process_time()while time.process_time() - start_time < 5:# Код, который будет выполняться в течение пяти секунд
import selectselect.select([], [], [], 5)

Wählen Sie die geeignete Methode aus, abhängig von der gewünschten Verzögerung und dem Anwendungsfall in Ihrem Projekt. Diese alternativen Methoden helfen Ihnen, Verzögerungen in Ihrem Python-Code flexibler zu verwalten. Viel Glück!

Methoden zum Erstellen einer Pause in Python, ohne die Time-Funktion zu verwenden.sleep()

Verzögerte Codeausführung kann in vielen Fällen nützlich sein, einschließlich Testen, Simulieren langer Operationen und Erstellen von Spielschleifenschleifen. In Python wird normalerweise die Time-Funktion verwendet, um eine Pause zu erstellen.sleep() , es gibt jedoch andere Möglichkeiten, dies ohne sie zu tun.

Im Folgenden finden Sie einige Methoden zum Erstellen einer Pause in Python, ohne die Time-Funktion zu verwenden.sleep() :

  1. Verwenden der select() -Funktion des selectors :
  2. Verwenden der Funktion sleep() des Signalmoduls :
    Das Signalmodul enthält Funktionen zur Signalverarbeitung, und die sleep() -Funktion dieses Moduls kann verwendet werden, um eine Programmpause zu erstellen. Dadurch wird die Verzögerung unterbrochen, wenn ein Signal in den Prozess eingeht.
  3. Verwenden der Threading-Funktion.Event() :
    Das Threading-Modul enthält Klassen und Funktionen zum Arbeiten mit Threads. Die Event() -Klasse stellt ein Ereignis dar, für das ein Wert festgelegt und erwartet werden kann, dass es zurückgesetzt wird. Die wait() -Methode dieser Klasse kann verwendet werden, um eine Programmpause zu erstellen.

Wenn Sie diese Methoden verwenden, können Sie die Codeausführung in Python verzögern, ohne die time-Funktion zu verwenden.sleep() . Jede Methode hat ihre eigenen Merkmale und kann in verschiedenen Situationen nützlich sein.

Verwenden der Event-Engine

Mit der Event-Engine können Sie ein Objekt mit einem Status erstellen, der gestartet oder angehalten werden kann. Der zweite Thread kann darauf warten, dass das Event-Objekt signalisiert, dass es gestartet oder gestoppt wird. Dies ermöglicht eine Verzögerung bei der Codeausführung, ohne den gesamten Prozess zu blockieren.

Beispiel für die Verwendung des Ereignismechanismus zum Erstellen einer Verzögerung:

def delayed_execution(event, delay):

# Code, der nach einer Verzögerung ausgeführt werden soll

delay = 5 # Verzögerung in Sekunden

thread = threading.Thread(target=delayed_execution, args=(event, delay))

# Code, der sofort ausgeführt wird

event.set() # Verzögerung auslösen

In diesem Beispiel werden ein Event-Objekt und ein anderer Thread mit der Funktion delayed_execution() erstellt. Der Stream wartet auf ein Signal vom Event-Objekt, dass die Verzögerung gestartet oder gestoppt wird, und führt den Code erst nach der Verzögerung aus. Verwenden Sie die event-Methode.set() die Verzögerung wird ausgelöst.

Daher ermöglicht die Event-Engine eine Verzögerung bei der Codeausführung, ohne den Hauptthread zu blockieren oder die time-Funktion zu verwenden.sleep() . Es ist eine flexiblere und leistungsfähigere Möglichkeit, Verzögerungen und Ereignisse in Python zu verwalten.

Verwenden des Threading-Moduls.Timer

Um das Threading-Modul zu verwenden.Timer muss importiert werden:

Sie können dann ein Objekt der Timer-Klasse erstellen, indem Sie die Verzögerungszeit in Sekunden und die Funktion angeben, die nach der Verzögerung aufgerufen werden soll:

timer = threading.Timer(5, my_function)

In diesem Beispiel wird der Timer nach 5 Sekunden ausgelöst und die Funktion my_function aufgerufen. Ersetzen Sie my_function durch Ihre Funktion, die Sie ausführen möchten. Dann müssen Sie den Timer starten:

Der Timer beginnt nun, die Zeit zu zählen und ruft nach der angegebenen Verzögerung die angegebene Funktion auf. Sie können den Timer auch jederzeit mit der cancel() -Methode abbrechen :

Ein Beispiel für die Verwendung des Threading-Moduls.Timer:

import threadingdef print_message():print("Привет, мир!")timer = threading.Timer(3, print_message)timer.start()

In diesem Beispiel wird die Funktion print_message nach 3 Sekunden aufgerufen und die Meldung "Hallo Welt!".

Mit dem Threading-Modul.Timer, es ist einfach, eine Verzögerung in Python zu erstellen, ohne die time-Funktion zu verwenden.sleep() und mehr Flexibilität bei der Steuerung des Timers haben.

Rekursiver Funktionsaufruf mit einer einfachen Bedingung

Wenn Sie eine Verzögerung in Python erstellen müssen, ohne die Time-Funktion zu verwenden.sleep(), Sie können einen rekursiven Funktionsaufruf mit einer einfachen Bedingung verwenden.

Stellen Sie sich vor, Sie möchten eine Verzögerung von einer Sekunde erzeugen. Sie können eine Funktion definieren, die sich selbst aufruft, bis eine einfache Bedingung erfüllt ist - eine Sekunde ist vergangen.

  • Definieren Sie die Delay-Funktion
  • Legen Sie die Variable start_time auf die aktuelle Uhrzeit fest
  • Überprüfen Sie innerhalb der Funktion, ob eine Sekunde mit der Bedingung (time.time() - start_time) >= 1
  • Wenn die Bedingung erfüllt ist, beenden Sie einfach die Funktion
  • Wenn die Bedingung nicht erfüllt ist, rufen Sie die Delay-Funktion erneut auf

Es ist wichtig zu beachten, dass bei rekursiven Funktionsaufrufen ohne Schleife ein Überlauf des Aufrufstapels möglich ist, wenn die Rekursion zu lange dauert. Denken Sie also daran, wenn Sie diese Methode verwenden.

Verwenden der Funktion functools.partial

Um eine Verzögerung zu erzeugen, ohne die time-Funktion zu verwenden.sleep() Sie können die Funktion functools verwenden.partial. Sie können beispielsweise eine delay() -Funktion erstellen, die eine bestimmte Funktion mit einer bestimmten Verzögerung aufruft:

import functoolsimport timedef delayed_func(delay, func):time.sleep(delay)func()delayed_print = functools.partial(delayed_func, 1, print)delayed_print("Привет, мир!")

In diesem Beispiel wird eine delayed_print-Funktion erstellt, die die print-Funktion mit einer Verzögerung von 1 Sekunde aufruft. Als Ergebnis wird "Hallo Welt!" mit Verzögerung.

Verwenden der Funktion functools.mit partial können Sie die Verzögerung und die aufgerufene Funktion flexibel anpassen, wodurch der Code verständlicher und modularer wird.

Asynchrone Funktionen über das asyncio-Modul anwenden

Das asyncio-Modul in Python bietet die Möglichkeit, asynchrone Funktionen zu erstellen, um Aufgaben effizient zu verarbeiten, ohne den Hauptausführungsthread zu blockieren. Dies ist besonders nützlich, wenn Sie mit Zeitverzögerungen arbeiten, wenn Sie vermeiden möchten, dass ein Programm blockiert wird und andere Aufgaben fortgesetzt werden.

Mit asynchronen Funktionen können Sie mehrere Aufgaben parallel ausführen, ohne darauf zu warten, dass jeder einzelne Vorgang beendet wird. Dies wird durch die Verwendung von Corutin-Funktionen erreicht, die zu einem bestimmten Zeitpunkt angehalten und fortgesetzt werden können.

Beispiel für die Anwendung von asynchronen Funktionen über das asyncio-Modul:

import asyncioasync def delay(seconds):print("Начало задержки")await asyncio.sleep(seconds)print("Конец задержки")async def main():print("Начало программы")await asyncio.gather(delay(1),delay(2),delay(3))print("Конец программы")if __name__ == "__main__":asyncio.run(main())

In diesem Beispiel haben wir eine asynchrone Funktion erstellt delay, die die Ausführung für eine bestimmte Anzahl von Sekunden mit einer Funktion anhält asyncio.sleep. Dann kombinieren wir die Ausführung der drei asynchronen Funktionen delay in der Funktion main mit der Funktion asyncio.gather.

Die Verwendung von asynchronen Funktionen über das Asyncio-Modul ermöglicht somit eine effiziente Arbeit mit Zeitverzögerungen und mehrere Aufgaben gleichzeitig, wodurch die Leistung und Reaktionsfähigkeit des Programms verbessert wird.

Verwenden eines Generators mit dem Schlüsselwort yield

Eine Möglichkeit, die Codeausführung zu verzögern, ohne die time-Funktion zu verwenden.sleep() ist die Erstellung eines Generators, der mit einer gegebenen Verzögerung einen Wert zurückgibt. Zum Beispiel:

def delay_generator(delay):for i in range(delay):yield i

In diesem Beispiel gibt die Funktion delay_generator() einen Generator zurück, der bei jeder Iteration einen i-Wert zurückgibt. Der Wert von i wird mit jeder Iteration um eins erhöht. Da die Funktion gleichzeitig das Schlüsselwort yield enthält, wird sie nicht sequenziell ausgeführt, sondern wartet auf die nächste Iteration.

Um den Generator mit einer Verzögerung zu verwenden, können Sie die Funktion next() aufrufen, um den nächsten Generatorwert mit einer bestimmten Verzögerung zu erhalten.

delay = 5 # Задержка в 5 секундgen = delay_generator(delay)while True:try:value = next(gen)print(value)except StopIteration:break

In diesem Beispiel wird ein Generator mit einer Verzögerung von 5 Sekunden erstellt und die Funktion next() wird in der Schleife aufgerufen, um den nächsten Wert zu erhalten. Als Ergebnis wird eine Zahl zwischen 0 und 4 mit einer Verzögerung von 1 Sekunde zwischen den Werten ausgegeben.

Wenn Sie einen Generator mit dem Schlüsselwort yield verwenden, können Sie eine Verzögerung bei der Codeausführung erzeugen, ohne die time-Funktion zu verwenden.sleep(). Dies kann nützlich sein, wenn Sie eine Pause bei der Programmausführung erstellen möchten, aber weiterhin andere Aufgaben ausführen möchten.

Anwenden einer ereignisgesteuerten Schleife (Event-driven Loop)

Der Vorteil dieses Ansatzes besteht darin, dass wir diese Schleife verwenden können, um andere Operationen durchzuführen oder Bedingungen zu überprüfen, während wir auf eine Verzögerung warten. Dies kann besonders nützlich sein, wenn wir während des Wartens etwas anderes tun möchten.

Wie funktioniert das? Wir erstellen eine Funktion, die nach einem Ereignis sucht, das die Schleife beendet. Nach jeder Überprüfung machen wir eine kleine Verzögerung (z. B. die Verwendung von time.sleep() innerhalb einer Schleife). Wenn ein Ereignis auftritt, verlassen wir die Schleife und fahren mit der Ausführung des Programms fort.

Ein Beispiel für einen solchen Zyklus:

import timedef wait_for_event(event):while not event.is_set():# Дейтвие, которое выполняется внутри циклаtime.sleep(0.1)# Создание событияevent = threading.Event()# Запуск цикла ожиданияwait_for_event(event)# После срабатывания события, программа продолжает работуprint("Событие произошло!")

In diesem Beispiel verwenden wir das Threading-Modul, um ein Ereignis und eine time-Funktion zu erstellen.sleep(), um eine Verzögerung innerhalb der Schleife zu erzeugen.

Die Anwendung der Ereignisschleifenoptimierung gibt uns mehr Flexibilität und Kontrolle beim Erstellen einer Verzögerung. Wir können die Schleife verwenden, um andere Operationen durchzuführen oder Bedingungen zu überprüfen, was dazu beiträgt, unseren Code effizienter und benutzerfreundlicher zu machen.

Verwenden der OS-Funktion.system und Ping-Befehle

Um eine Verzögerung in Python zu erzeugen, ohne die Time-Funktion zu verwenden.sleep() Sie können die os-Funktion verwenden.system und den Befehl ping.

Der Ping-Befehl wird verwendet, um die Kommunikation mit dem Remote-Host zu überprüfen. Wenn der angegebene Host verfügbar ist, wird eine Antwort erhalten. Andernfalls wird eine Meldung angezeigt, die besagt, dass auf eine Antwort gewartet wird.

Um eine Verzögerung zu erzeugen, verwenden Sie den Befehl ping, um die Wartezeit für eine Antwort vom Host als Argument anzugeben.

    Wir importieren das OS-Modul:

import os
def delay(seconds):os.system(f"ping -n 2 -w 127.0.0.1 > nul")
delay(5)

Also mit der OS-Funktion.system und der Ping-Befehl können eine Verzögerung in Python erzeugen, ohne die time-Funktion zu verwenden.sleep().

Verwenden des Rückrufmechanismus (Callback)

Die Anwendung des Callback-Mechanismus ist besonders nützlich, wenn Sie während der Ausführung von Operationen eine Verzögerung erstellen müssen, um den Hauptausführungsthread Ihres Programms nicht zu blockieren.

Betrachten Sie ein einfaches Beispiel für die Anwendung des Rückrufmechanismus:

import timedef delayed_callback(delay, callback):start_time = time.time()while True:current_time = time.time()elapsed_time = current_time - start_timeif elapsed_time >= delay:callback()breakdef my_callback():print("Задержка прошла!")delayed_callback(5, my_callback)

In diesem Beispiel erstellen wir eine delayed_callback-Funktion, die zwei Argumente verwendet: delay ist eine Verzögerung in Sekunden und callback ist eine Funktion, die nach dem Ende der Verzögerung aufgerufen wird.

Die delayed_callback-Funktion verwendet eine while-Schleife, um die verstrichene Zeit zu verfolgen. Wenn die angegebene Zeit vergangen ist, ruft sie die callback-Funktion mit dem Operator () auf und beendet sie dann mit der break-Anweisung.

Die Verwendung eines Callback-Mechanismus ermöglicht es Ihnen, eine Verzögerung in Python zu erzeugen, ohne den Hauptausführungsthread zu blockieren und Ressourcen zu speichern, was sie zu einem sehr nützlichen Werkzeug beim Schreiben asynchroner Programme und bei der Ereignisbehandlung macht.

Beachten: die Verwendung dieses Mechanismus kann bei der Arbeit mit Funktionen, die von anderen Prozessen und Ressourcen abhängen, unvorhersehbar sein und sollte daher mit Vorsicht verwendet werden.