it-swarm.com.de

Wie kann ich in Python eine Zeitverzögerung machen?

Ich würde gerne wissen, wie man eine Zeitverzögerung in ein Python Skript einfügt.

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

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

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

Sie können die Funktion sleep() im Modul time verwenden . Es kann ein float-Argument für eine Auflösung von weniger als einer Sekunde verwendet werden.

from time import sleep
sleep(0.1) # Time in seconds
720
pobk

Bitte lesen Sie this , was Ihnen weiterhelfen kann:

Probieren Sie die Sleep-Funktion im Zeitmodul aus.

import time
time.sleep(60)

Fügen Sie dies in eine while -Schleife ein, und eine Anweisung wird nur in der Minute ausgeführt. Auf diese Weise können Sie eine Anweisung in vordefinierten Intervallen ausführen, unabhängig davon, wie lange der Befehl dauert (solange er weniger als eine Minute dauert) oder 5 oder 60 oder wie auch immer Sie es einstellen) Zum Beispiel wollte ich einmal pro Minute einen Ping ausführen. Wenn ich nur time.sleep(60) oder time.sleep(45) gerade, dauert der Ping nicht immer gleich lange. Hier ist der Code :)

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

Der [5] zieht nur die Sekunden aus dem Rückgabewert des time.localtime() heraus.

Das Tolle an time.sleep ist, dass es Gleitkommazahlen unterstützt!

import time
time.sleep(0.1) 

Weitere Informationen

135
tehvan

Wie kann ich in Python eine Zeitverzögerung machen?

In einem Thread schlage ich vor, dass sleep function :

>>> from time import sleep

>>> sleep(4)

Diese Funktion unterbricht die Verarbeitung des Threads, in dem sie vom Betriebssystem aufgerufen wird, und ermöglicht es anderen Threads und Prozessen, im Ruhezustand ausgeführt zu werden.

Verwenden Sie es für diesen 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 Treffer gedruckt Enter.

Beispiel mit sleep mit mehreren Threads und Prozessen

Wiederum unterbricht sleep Ihren Thread - er verbraucht nahezu null Rechenleistung.

Erstellen Sie zur Demonstration ein Skript wie dieses (ich habe es zuerst in einer interaktiven Python 3.5-Shell versucht, aber Unterprozesse können die party_later -Funktion aus irgendeinem Grund nicht finden):

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 __== '__main__':
    main()

Beispielausgabe 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

Multithreading

Mit dem Objekt Timerthreading können Sie eine Funktion auslösen, die zu einem späteren Zeitpunkt in einem separaten Thread aufgerufen werden soll:

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

>>> 

Die leere Zeile zeigt an, dass die Funktion nach meinem Standard ausgegeben wurde und ich drücken musste Enter um sicherzustellen, dass ich auf einer Eingabeaufforderung war.

Der Vorteil dieser Methode ist, dass ich, während der Thread Timer gewartet hat, andere Dinge tun konnte, in diesem Fall, die getroffen wurden Enter einmal - vor der Ausführung der Funktion (siehe die erste leere Eingabeaufforderung).

Es gibt kein entsprechendes Objekt in der Multiprocessing Library . Sie können eine erstellen, diese existiert jedoch wahrscheinlich nicht aus einem bestimmten Grund. Ein Sub-Thread ist für einen einfachen Timer viel sinnvoller als ein ganz neuer Sub-Prozess.

79
Aaron Hall

Ein bisschen Spaß mit einem schläfrigen Generator .

Die Frage ist über die Zeitverzögerung. Es kann eine feste Zeit sein, aber in einigen Fällen ist möglicherweise eine Verzögerung erforderlich, die seit dem letzten Mal gemessen wurde. Hier ist eine mögliche Lösung:

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

Die Situation kann sein, wir möchten so regelmäßig wie möglich etwas tun und wir möchten uns nicht mit dem ganzen last_time, next_time Zeug um unseren Code herum beschäftigen.

Summer Generator

Der folgende Code ( sleepy.py ) definiert einen 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

Aufruf von regulären Buzzergen

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 lassen, 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, könnten 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 Summer nicht zu starr und ermöglicht es uns, regelmäßige Schlafintervalle einzuhalten, selbst wenn wir verschlafen und aus dem regulären Zeitplan aussteigen.

48
Jan Vlcinsky

Verzögerungen können auch mithilfe der folgenden Methoden implementiert werden.

Erste Methode

import time
time.sleep(5) # Delay for 5 seconds.

Die zweite Methode zum Verzögern wäre die implizite Wartemethode:

 driver.implicitly_wait(5)

Die dritte Methode ist nützlicher, wenn Sie warten müssen, bis eine bestimmte Aktion abgeschlossen ist oder ein Element gefunden wurde:

self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))
33
Humble_boy

Die tkinter-Bibliothek in der Standardbibliothek Python ist ein interaktives Tool, das Sie importieren können. Grundsätzlich können Sie Schaltflächen und Felder sowie Popups und andere Elemente erstellen, die als Fenster angezeigt werden und die Sie mit Code bearbeiten können.

Wenn Sie tkinter verwenden, VERWENDEN Sie NICHT TIME.SLEEP(), da dies Ihr Programm durcheinander bringt. Das ist mir passiert. Verwenden Sie stattdessen root.after() und ersetzen Sie die Werte für so viele Sekunden durch Millisekunden. Zum Beispiel ist time.sleep(1) äquivalent zu root.after(1000) in tkinter.

Ansonsten time.sleep(), worauf viele Antworten hingewiesen haben, was der richtige Weg ist.

27
Parallax Sugar

Verzögerungen werden mit der Funktion Zeitbibliothek durchgeführt, insbesondere mit der Funktion time.sleep() .

Um es einfach eine Sekunde warten zu lassen:

from time import sleep
sleep(1)

Das funktioniert, weil:

from time import sleep

Sie extrahieren die Sleep-Funktion nur aus der Zeitbibliothek , dh Sie können sie einfach aufrufen mit:

sleep(seconds)

Anstatt tippen zu müssen

time.sleep()

Welches ist umständlich lang zu tippen.

Mit dieser Methode würden Sie keinen Zugriff auf die anderen Funktionen der Zeitbibliothek erhalten, und Sie können keine Variable mit dem Namen sleep haben. Sie können jedoch eine Variable mit dem Namen time erstellen.

Das Ausführen von from [library] import [function] (, [function2]) ist großartig, wenn Sie nur bestimmte Teile eines Moduls benötigen.

Sie können es genauso machen wie:

import time
time.sleep(1)

und Sie hätten Zugriff auf die anderen Funktionen der Zeitbibliothek wie time.clock() , solange Sie time.[function]() eingeben, aber Sie konnten die variable Zeit nicht erstellen, da sie die überschreiben würde importieren. Eine Lösung dafür zu tun

import time as t

womit Sie auf die Zeitbibliothek als t verweisen können, was Ihnen Folgendes ermöglicht:

t.sleep()

Dies funktioniert in jeder Bibliothek.

26
Matthew Miles

Ich kenne 5 Methoden: time.sleep(), pygame.time.wait(), matplotlib's pyplot.pause(), .after() und driver.implicitly_wait().


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 das Pygame-Fenster nicht verwenden, aber das Fenster sofort schließen können):

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')

matplotlib's function pyplot.pause() example (nicht empfohlen, wenn Sie den Graphen nicht verwenden, aber den Graphen sofort verlassen können):

import matplotlib
print('Hello')
matplotlib.pyplot.pause(5)#seconds 
print('Bye')

Die .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 die Methode driver.implicitly_wait() (Selenium):

driver.implicitly_wait(5)#waits 5 seconds
25
Trooper Z

Die beste Möglichkeit, die Zeit in Python zu verzögern, ist die Verwendung der Bibliothek time. So was:

import time
time.sleep(10)

Ersetzen Sie einfach 10 durch die Anzahl der Sekunden, die Sie verzögern möchten. Sie können Formate wie '10 .1 ',' 5.07 'usw. verwenden.

Es wird nicht empfohlen, dies mit Tkinter zu verwenden

19
import time
time.sleep(1) #sleep for one second.

Einfaches Beispiel:

#After five seconds,output "hello python!!!"
import time
time.sleep(5)
print("hello python!!!")
9
Jia

asyncio.sleep

Beachten Sie, dass Sie in den neuesten python -Versionen (Python 3.4 oder höher) asyncio.sleep verwenden können. Es hängt mit asynchroner Programmierung und Asynchronität zusammen. Schauen 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}')

Wir können denken, dass es für die erste Methode 2 Sekunden "schläft" und für die zweite Methode dann 3 Sekunden, also insgesamt 5 Sekunden Laufzeit dieses Codes. Aber es wird gedruckt:

total_running_time: 0:00:03.01286

Empfehle offizielle Asyncio-Dokumentation für weitere Details

8
Aaron_ab

Wenn Sie eine Zeitverzögerung in das Python -Skript einfügen möchten:

Verwenden Sie time.sleep oder Event().wait wie folgt:

_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')       
_

Wenn Sie jedoch die Ausführung einer Funktion verzögern möchten, gehen Sie wie folgt vor:

Verwenden Sie threading.Timer wie folgt:

_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 sec later with [delay_in_sec] as *args parameter
t.start()  # returns None
print("Started")
_

Ausgänge:

_Started
function called after 2 seconds         
_

Warum den späteren Ansatz verwenden?

  • Beendet nicht die Ausführung des gesamten Skripts. (mit Ausnahme der Funktion, die Sie übergeben)
  • Nachdem Sie den Timer gestartet haben, können Sie ihn auch stoppen, indem Sie timer_obj.cancel() ausführen.
7
BlackBeard

Dies ist ein einfaches Beispiel für eine Zeitverzögerung:

import time

def delay(period='5'):
    # If the user enters nothing, It'll wait 5 seconds
    try:
        #If the user not enters a int, I'll just return ''
        time.sleep(period)
    except:
        return ''

Ein anderer in Tkinter:

import tkinter

def tick():
    pass

root=Tk()
delay=100 # time in milliseconds
root.after(delay,tick)
root.mainloop()
6
Tejas Joshi

Während alle anderen das De-facto-Modul time vorgeschlagen haben, dachte ich, ich würde eine andere Methode mit der Funktion matplotlib von pyplot teilen, pause .

Ein Beispiel

from matplotlib import pyplot as plt
plt.pause(5)    # Pauses the program for 5 seconds

In der Regel wird dies verwendet, um zu verhindern, dass die Zeichnung verschwindet, sobald sie gezeichnet wird, oder um grobe Animationen zu erstellen.

Dies würde Ihnen ein import ersparen, wenn Sie bereits matplotlib importiert haben.

5
Haran Rajkumar

sie können die Methode sleep in time package verwenden, um die Ausführung des Programms python zu verzögern

import time
time.sleep(1)   # Delays for 1 seconds.
4
Codemaker

Ich habe nach den vorherigen Antworten gesucht und möchte einfach darauf aufbauen.

Ich wollte schon oft einen Tippeffekt erzeugen. So kannst du das machen (Python 3):

import time # For pausing

def typewrite(text):
    for i in text:
        print(i, end="", flush=True) # flush is True, so the result will get printed before waiting
        time.sleep(0.1)

Und in Python 2:

import time, sys # Time is for pausing, sys for printing without a new line

def typewrite(text):
    sys.stdout.flush() # flush is True, so the result will get printed before waiting
    for i in text:
        sys.stdout.write(i)
        time.sleep(0.1)

Ich hoffe das hat dir irgendwie geholfen.

3
SimpleBinary

Wenn Sie Autopygui installiert haben, können Sie Folgendes verwenden:

#imports
import pyautogui

pyautogui._autoPause(time1,time2)

Die gesamte Pausenzeit beträgt time1 * time2 Sekunden

0
edison