without - python3 sleep




Wie kann ich in Python eine Verzögerung machen? (9)

Ich würde gerne wissen, wie man ein Python-Skript zeitlich verzögert.

https://code.i-harness.com


Wie kann ich in Python eine Verzögerung machen?

In einem einzigen Thread schlage ich die Schlaffunktion vor:

>>> from time import sleep

>>> sleep(4)

Dadurch wird die Verarbeitung des Threads, in dem er vom Betriebssystem aufgerufen wird, ausgesetzt, sodass andere Threads und Prozesse ausgeführt werden können, während sie inaktiv sind.

Verwenden Sie es 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!" 3 Sekunden nach dem Drücken der Eingabetaste gedruckt.

Beispiel mit sleep mit mehreren Threads und Prozessen

Der sleep setzt den Thread wieder aus - er verbraucht fast keine Verarbeitungsleistung.

Um dies zu demonstrieren, erstellen Sie ein Skript wie dieses (zuerst habe ich es in einer interaktiven Python 3.5-Shell versucht, aber aus irgendeinem Grund kann die party_later Funktion von Unterprozessen nicht gefunden werden):

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

Beispielausgabe aus diesem Skript:

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

Sie können eine Funktion auslösen, die zu einem späteren Zeitpunkt in einem separaten Thread mit dem Timer Threading-Objekt aufgerufen wird:

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

>>> 

Die leere Zeile zeigt, dass die Funktion zu meinem Standard gedruckt wurde, und ich musste die Eingabetaste drücken, um sicherzustellen, dass ich dazu aufgefordert wurde.

Der Vorteil dieser Methode ist, dass ich, während der Timer Thread wartete, andere Dinge tun konnte. In diesem Fall drückte ich einmal die Eingabetaste - bevor die Funktion ausgeführt wurde (siehe die erste leere Eingabeaufforderung).

In der Multiprocessing-Bibliothek gibt es kein entsprechendes Objekt. Sie können einen erstellen, der aber wahrscheinlich nicht existiert. Ein Unter-Thread ist für einen einfachen Timer viel sinnvoller als ein ganz neuer Unterprozess.


Bitte lesen Sie https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378 , die Ihnen weiterhelfen können:

Versuchen Sie die Sleep-Funktion im Zeitmodul.

import time
time.sleep(60)

Fügen Sie dies in eine while Schleife ein, und eine Anweisung wird nur in der Minute ausgeführt. Damit können Sie eine Anweisung in vordefinierten Intervallen ausführen, unabhängig davon, wie lange der Befehl dauert (sofern dies weniger als eine Minute oder 5 oder 60 dauert.) oder was auch immer Sie eingestellt haben) Zum Beispiel wollte ich einmal pro Minute einen Ping ausführen. Wenn ich einfach nur time.sleep(60) oder time.sleep(45) , time.sleep(45) der Ping nicht immer gleich viel Zeit. Hier ist der Code :)

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

Die [5] zieht nur die Sekunden aus dem time.localtime() von time.localtime() .

Das Tolle an time.sleep ist, dass Fließkommazahlen unterstützt werden!

import time
time.sleep(0.1) 

http://python.org/doc/current/lib/module-time.html


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

Wenn Sie tkinter verwenden, VERWENDEN Sie TIME.SLEEP() NICHT, da dadurch Ihr Programm TIME.SLEEP() wird. Das ist mir passiert. Verwenden root.after() stattdessen root.after() und ersetzen Sie die Werte für viele Sekunden durch Millisekunden. time.sleep(1) entspricht z. B. root.after(1000) in tkinter.

Ansonsten time.sleep() , auf die viele Antworten hingewiesen haben, ist der Weg.


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 anderes in Tkinter:

import tkinter

def tick():
    pass

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

Es gibt 4 Methoden, die ich kenne: time.sleep() , pygame.time.wait() , matplotlibs pyplot.pause() und .after() .

time.sleep() Beispiel (nicht verwenden, wenn Tkinter verwendet wird):

import time
print('Hello')
time.sleep(5) #number of seconds
print('Bye')

pygame.time.wait() (nicht zu empfehlen, wenn Sie das Pygame-Fenster nicht verwenden, aber Sie könnten 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 zu empfehlen, wenn Sie die Grafik nicht verwenden, aber Sie können die Grafik sofort beenden):

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

Zum Schluss noch 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')

Sie können die sleep() Funktion im Zeitmodul verwenden. Es kann ein Float-Argument für eine zweite Auflösung dauern.

from time import sleep
sleep(0.1) # Time in seconds.

Verzögerungen werden mit der time.sleep() gemacht, insbesondere mit der Funktion time.sleep() ...

Um es einfach warten zu lassen:

from time import sleep
sleep(1)

Das funktioniert, weil:

from time import sleep

Sie extrahieren die time.sleep() nur aus der Zeitbibliothek. Sie können sie also einfach mit aufrufen:

sleep(seconds)

anstatt tippen zu müssen

time.sleep()

das ist unhandlich lang zu tippen.

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

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

Sie könnten es auch als tun

import time
time.sleep(1)

und Sie hätten Zugriff auf die anderen Funktionen der time.clock() wie time.clock() , solange Sie time.[function]() time.clock() , die variable Zeit konnte jedoch nicht erstellt werden.


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

Ein Beispiel

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

Normalerweise wird dies verwendet, um zu verhindern, dass der Plot beim Plotten verschwindet, oder um grobe Animationen zu erstellen.

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


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

Hier ist ein weiteres Beispiel, bei 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).




timedelay