Funzione Sleep di Python: come aggiungere ritardi al codice
Pubblicato: 2022-12-01Questo tutorial ti insegnerà come utilizzare la funzione sleep() dal modulo time integrato di Python per aggiungere ritardi temporali al codice.
Quando si esegue un semplice programma Python, l'esecuzione del codice avviene in sequenza , un'istruzione dopo l'altra, senza alcun ritardo. Tuttavia, in alcuni casi potrebbe essere necessario ritardare l'esecuzione del codice. La funzione sleep()
del modulo time integrato di Python ti aiuta a farlo.
In questo tutorial imparerai la sintassi dell'uso della funzione sleep()
in Python e diversi esempi per capire come funziona. Iniziamo!
Sintassi di Python time.sleep()
Il modulo time
, integrato nella libreria standard di Python, fornisce diverse utili funzioni relative al tempo. Come primo passo, importa il modulo time
nel tuo ambiente di lavoro:
import time
Poiché la funzione sleep()
fa parte del modulo time
, ora puoi accedervi e utilizzarla con la seguente sintassi generale:
time.sleep(n)
Qui, n
è il numero di secondi per dormire. Può essere un numero intero o un numero in virgola mobile.
A volte il ritardo richiesto può essere di pochi millisecondi. In questi casi è possibile convertire la durata in millisecondi in secondi e utilizzarla nella chiamata alla funzione sleep. Ad esempio, se desideri introdurre un ritardo di 100 millisecondi, puoi specificarlo come 0,1 secondi: time.sleep(0.1)
.
Puoi anche importare solo la funzione sleep
dal modulo time
:
from time import sleep
Se utilizzi il metodo precedente per l'importazione, puoi chiamare direttamente la funzione sleep()
, senza utilizzare time.sleep()
.
Ora che hai imparato la sintassi della funzione sleep()
di Python, codifichiamo degli esempi per vedere la funzione in azione. Puoi scaricare gli script Python usati in questo tutorial dalla cartella python-sleep in questo repository GitHub.
Ritarda l'esecuzione del codice con sleep()
Come primo esempio, usiamo la funzione sleep per ritardare l'esecuzione di un semplice programma Python.

Nel seguente frammento di codice:
- La prima istruzione
print()
viene eseguita senza alcun ritardo. - Introduciamo quindi un ritardo di 5 secondi utilizzando la funzione
sleep()
. - La seconda istruzione
print()
verrà eseguita solo al termine dell'operazione sleep.
# /python-sleep/simple_example.py import time print("Print now") time.sleep(5) print("Print after sleeping for 5 seconds")
Ora esegui il file simple_example.py
e osserva l'output:
$ python3 simple_example.py
Aggiungi diversi ritardi a un blocco di codice
Nell'esempio precedente, abbiamo introdotto un ritardo fisso di 5 secondi tra l'esecuzione di due istruzioni print()
. Quindi, codifichiamo un altro esempio per introdurre diversi tempi di ritardo durante il ciclo di un iterabile.
In questo esempio, vorremmo fare quanto segue:
- Passa attraverso una frase, accedi a ogni parola e stampala.
- Dopo aver stampato ogni parola, vorremmo attendere un periodo di tempo specifico, prima di stampare la parola successiva nella frase.
Looping attraverso una stringa di stringhe
Considera la stringa, sentence
. È una stringa in cui ogni parola è una stringa in sé.
Se eseguiamo un ciclo della stringa, otterremo ogni carattere, come mostrato:
>>> sentence = "How long will this take?" >>> for char in sentence: ... print(char) # Output (truncated for readability) H o w . . . t a k e ?
Ma non è questo che vogliamo. Vorremmo scorrere la frase e accedere a ogni parola. Per fare ciò, possiamo chiamare il metodo split()
sulla stringa della sentence
. Ciò restituirà un elenco di stringhe, ottenuto dividendo la stringa della sentence
, su tutte le occorrenze di spazi bianchi.
>>> sentence.split() ['How', 'long', 'will', 'this', 'take?'] >>> for word in sentence.split(): ... print(word) # Output How long will this take?
Looping attraverso iterabili con ritardi diversi
Rivediamo l'esempio:
-
sentence
è la stringa che vorremmo scorrere per accedere a ciascuna parola. -
delay_times
è l'elenco dei tempi di ritardo che useremo come argomento della funzionesleep()
durante ogni passaggio del ciclo.
Qui vorremmo scorrere contemporaneamente due liste: la lista delay_times
e la lista di stringhe ottenute dividendo la stringa della sentence
. È possibile utilizzare la funzione zip()
per eseguire questa iterazione parallela.
La funzione Python zip() : zip(list1, list2) restituisce un iteratore di tuple, dove ogni tupla contiene l'elemento all'indice i in list1 e list2.
# /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)
Senza la funzione sleep, il controllo procederebbe immediatamente all'iterazione successiva. Poiché abbiamo introdotto un ritardo, il passaggio successivo nel ciclo avviene solo dopo che l'operazione di sospensione è stata completata.
Ora esegui delay_times.py
e osserva l'output:
$ python3 delay_times.py
Le parole successive nella stringa verranno stampate dopo un certo ritardo. Il ritardo dopo la stampa della parola all'indice i
nella stringa è il numero all'indice i
nell'elenco delay_times
.
Conto alla rovescia in Python
Come prossimo esempio, codifichiamo un semplice conto alla rovescia in Python.


Definiamo una funzione countDown()
:
# /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)
Successivamente, analizziamo la definizione della funzione countDown()
:
- La funzione accetta un numero
n
come argomento e conta fino a zero partendo da quel numeron
. - Usiamo time.sleep(1) per ottenere un ritardo di un secondo tra i conteggi.
- Quando il conteggio raggiunge lo 0, la funzione stampa "Pronto a partire!".
Per eseguire l'operazione di conto alla rovescia, abbiamo utilizzato la funzione
range()
con un valore di incremento negativo di -1.range(n, -1, -1)
ci aiuterà a scorrere l'intervallo di numeri in n, n – 1, n – 2 e così via fino a zero. Ricordiamo che il punto finale è escluso per impostazione predefinita quando si utilizza la funzionerange()
.
Quindi aggiungiamo una chiamata alla funzione countDown()
con 5 come argomento.
countDown(5)
Ora esegui lo script countdown.py
e guarda la funzione countDown
in azione!
$ python3 countdown.py
Funzione Sleep nel multithreading
Il modulo di threading Python offre funzionalità di multithreading pronte all'uso. In Python, il Global Interpreter Lock o GIL assicura che ci sia un solo thread attivo in esecuzione in qualsiasi momento.

Tuttavia, durante le operazioni di I/O e le operazioni di attesa come la sospensione, il processore può sospendere l'esecuzione del thread corrente e passare a un altro thread in attesa.
Per capire come funziona, facciamo un esempio.
Creazione ed esecuzione di thread in Python
Considera le seguenti funzioni, func1()
, func2()
e func3()
. Passano in rassegna una serie di numeri e li stampano. Questo è seguito da un'operazione di sospensione, per un numero specifico di secondi, durante ogni passaggio attraverso il ciclo. Abbiamo utilizzato diversi tempi di ritardo per ciascuna delle funzioni per comprendere meglio come l'esecuzione passa da un thread all'altro contemporaneamente.
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, puoi usare il costruttore Thread()
per istanziare un oggetto thread. Utilizzando la sintassi threading.Thread(target = …, args = …)
crea un thread che esegue la funzione target
con l'argomento specificato nella tupla args
.
In questo esempio le funzioni, func1
, func2
e func3
, non accettano argomenti. Quindi è sufficiente specificare solo il nome della funzione come target. Definiamo quindi gli oggetti thread, t1
, t2
e t3
con func1
, func2
e func3
come obiettivi, rispettivamente.
t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
Ecco il codice completo per l'esempio di threading:
# /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()
Osservare l'output. L'esecuzione cambia tra i tre thread. Il thread t3
ha il tempo di attesa più basso, quindi viene sospeso per il minor tempo possibile. Il thread t1
ha la durata di sospensione più lunga di due secondi, quindi è l'ultimo thread a terminare l'esecuzione.
Per saperne di più, leggi il tutorial sulle basi del multithreading in Python.
Conclusione
In questo tutorial, hai imparato come usare la funzione sleep()
di Python per aggiungere ritardi temporali al codice.
Puoi accedere alla funzione sleep()
dal modulo time integrato, time.sleep()
. Per ritardare l'esecuzione di n secondi, utilizzare time.sleep(n)
. Inoltre, hai visto esempi di ritardare le successive iterazioni in un ciclo con valori diversi, conto alla rovescia e multithreading.
Ora puoi esplorare le funzionalità più avanzate del modulo temporale. Vuoi lavorare con date e orari in Python? Oltre al modulo orario, puoi sfruttare la funzionalità dei moduli data/ora e calendario.
Successivamente, impara a calcolare la differenza di fuso orario in Python.