Domanda Come posso creare un ritardo temporale in Python?


Mi piacerebbe sapere come mettere un ritardo di tempo in uno script Python.


2026
2018-02-04 07:04


origine


risposte:


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

Ecco un altro esempio in cui qualcosa viene eseguito all'incirca una volta al minuto:

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

2254
2018-02-04 07:05



Puoi usare il sleep() funzione nel modulo temporale. Può richiedere un argomento float per la risoluzione del secondo secondo.

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

564
2017-09-15 16:34



Si prega di leggere https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378, che può aiutarti ulteriormente:

Prova la funzione sleep nel modulo time.

import time
time.sleep(60)

E metti questo in a while loop e una dichiarazione verrà eseguita solo su   minuto ... Ciò consente di eseguire una dichiarazione a intervalli predefiniti   indipendentemente da quanto tempo impiega il comando (a patto che richieda meno di   un minuto o 5 o 60 o qualsiasi cosa tu abbia impostato su) Ad esempio, volevo   eseguire un ping una volta al minuto. Se solo io time.sleep(60) o time.sleep(45)    anche, il ping non richiederà sempre la stessa quantità di tempo. Ecco il   codice :)

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

Il [5] tira fuori i secondi dal time.localtime()Il ritorno   valore.

La cosa bella di time.sleep è che supporta il punto mobile   numeri!

import time
time.sleep(0.1) 

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


118
2018-02-04 07:07



Puoi ottenerlo semplicemente facendo questo:

from time import sleep

# Doing stuff
sleep(0.5) # Sleeping half a second (sleep() uses seconds, but you can also use floats)
# Doing stuff...

55
2018-01-18 18:48



Un po 'di divertimento con un sonno Generatore.

La domanda riguarda il ritardo temporale. Può essere fissato il tempo, ma in alcuni casi potremmo aver bisogno di un ritardo misurato dall'ultima volta. Ecco una possibile soluzione:

Ritardo misurato dall'ultima volta (svegliarsi regolarmente)

La situazione può essere, vogliamo fare qualcosa il più regolarmente possibile e non vogliamo preoccuparci di tutto il last_time, next_time roba tutto intorno al nostro codice.

Generatore di buzzer

Il seguente codice (sleepy.py) definisce a buzzergen Generatore:

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

Invocazione di buzzergen regolari

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

E mentre lo eseguiamo vediamo:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Possiamo anche usarlo direttamente in un ciclo:

import random
for ring in buzzergen(3):
    print "now", time.time()
    print "ring", ring
    time.sleep(random.choice([0, 2, 4, 6]))

E eseguendolo potremmo vedere:

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)

Come si vede, questo cicalino non è troppo rigido e ci permette di raggiungere con intervalli regolari assonnati anche se dormiamo troppo e si esce dal normale orario.


33
2018-05-14 21:30



Come posso creare un ritardo temporale in Python?

In un singolo thread suggerisco la funzione sleep:

>>> from time import sleep

>>> sleep(4)

Questo in effetti sospende l'elaborazione del thread in cui viene chiamato dal sistema operativo, consentendo l'esecuzione di altri thread e processi mentre sta dormendo.

Usalo per questo scopo, o semplicemente per ritardare una funzione dall'esecuzione. Per esempio:

>>> def party_time():
...     print('hooray!')
... 
>>> sleep(3); party_time()
hooray!

"Evviva!" stampato 3 secondi dopo che ho colpito accedere.

Esempio usando sleep con più thread e processi

Ancora, sleep sospende il thread - utilizza una potenza di elaborazione prossima a zero.

Per dimostrare, creare uno script come questo (l'ho provato per la prima volta in una shell Python 3.5 interattiva, ma i processi secondari non riescono a trovare il party_later funzione per qualche motivo):

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

Esempio di output da questo script:

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

È possibile attivare una funzione da chiamare in un secondo momento in un thread separato con Timeroggetto di filettatura:

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

>>> 

La riga vuota illustra che la funzione è stata stampata sul mio standard e ho dovuto colpire accedere per essere sicuro di essere pronto.

Il lato positivo di questo metodo è che mentre il Timer thread stava aspettando, sono stato in grado di fare altre cose, in questo caso, colpire accedere una volta - prima dell'esecuzione della funzione (vedere il primo prompt vuoto).

Non c'è un rispettivo oggetto nella libreria multiprocessing. Puoi crearne uno, ma probabilmente non esiste per un motivo. Un sottoprocesso ha molto più senso per un semplice timer rispetto a un intero processo secondario.


21
2018-06-21 03:25



La libreria tkinter nella libreria standard Python è uno strumento interattivo che puoi importare. Fondamentalmente, puoi creare pulsanti, finestre e popup e cose che appaiono come finestre che manipoli con il codice.

Se usi tkinter, NON USARE TIME.SLEEP() perché rovinerà il tuo programma. Questo è successo a me. Invece, usa root.after() e sostituire i valori per molti secondi, con un millisecondo. Per esempio, time.sleep(1) è equivalente a root.after(1000) in tkinter.

Altrimenti, time.sleep(), che molte risposte hanno indicato, che è la strada da percorrere.


20
2018-02-28 19:45