HOWTO · Python

Pausa programma in Python

Questo tutorial spiega come mettere in pausa un programma in Python

In questa pagina

Per mettere in pausa un programma Python, scegli il comportamento che ti serve: usa time.sleep() per un ritardo a tempo, input() per attendere una persona alla console oppure threading quando un thread deve attendere mentre un altro continua. Un comando di pausa della shell è disponibile solo in una console Windows e non è portabile.

Mettere in pausa per un intervallo fisso con time.sleep()

Importa il modulo time e chiama time.sleep(seconds) per sospendere il thread chiamante per la durata richiesta, espressa in secondi. Al termine dell’attesa, l’esecuzione riprende dall’istruzione successiva.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import time

print("Starting a short pause.")
time.sleep(0.1)
print("The program continues.")

La durata richiesta non è una garanzia di temporizzazione precisa. Il sistema operativo può riprendere il thread più tardi del previsto, quindi usa questa funzione per introdurre ritardi, non per pianificare attività con precisione. Mentre un thread è in attesa, non può svolgere il proprio lavoro; gli altri thread possono continuare a essere eseguiti.

Mettere in pausa per attendere l’input dell’utente con input()

Usa input() quando un programma da console deve attendere una persona. Mostra un prompt facoltativo, legge una riga e restituisce il testo inserito. Chiamarla senza assegnare il valore restituito è utile quando il programma deve continuare dopo qualsiasi risposta, per esempio quando si preme Invio. Gli esempi seguenti gestiscono la fine dell’input, così terminano correttamente anche se vengono eseguiti senza una console interattiva.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

try:
    input("Press Enter to continue: ")
except EOFError:
    pass

Se la risposta è importante, salva la stringa restituita e usala nel programma. Anche questo esempio gestisce la fine dell’input, che può verificarsi quando l’input viene reindirizzato o non è disponibile alcun input da console.

try:
    name = input("Your name: ")
except EOFError:
    name = "guest"

print(f"Hello, {name}.")

input() attende una riga di input da console; non è un metodo generico per mettere in pausa un servizio in background o il ciclo degli eventi di un’applicazione grafica.

Creare una funzione riutilizzabile per una pausa a tempo

Se devi introdurre ritardi ripetuti, racchiudi la chiamata in una piccola funzione di supporto. Importa time nello stesso script e passa il numero di secondi desiderato a ogni chiamata.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import time

def pause_for(seconds):
    time.sleep(seconds)

pause_for(0.1)
print("Ready.")

Questa funzione di supporto rende più concise le chiamate e mantiene il comportamento di time.sleep(): sospende il thread che la chiama. Aggiungi controlli o registrazione degli eventi solo se il programma circostante richiede queste regole.

Mettere in pausa un thread mentre il resto del lavoro continua

Una chiamata a sleep all’interno di una funzione eseguita da un worker sospende quel worker, non tutti i thread del processo. Durante il ritardo, il thread principale può svolgere altro lavoro. Chiamare join() attende poi che il worker termini; non mette di per sé in pausa il processo e non arresta gli altri thread.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import threading
import time

def worker():
    time.sleep(0.1)
    print("Worker finished.")

thread = threading.Thread(target=worker)
thread.start()
print("Main thread continues.")
thread.join()
print("Worker has been joined.")

Usa il coordinamento tra thread quando un’altra parte del programma deve attendere il completamento di un lavoro. Per un’attesa di coordinamento senza una durata definita, usa una primitiva di sincronizzazione come un evento invece di un’attesa arbitrariamente lunga; con sleep si controlla di nuovo solo dopo il ritardo scelto.

Usare os.system(“pause”) solo in una console Windows

In Windows, os.system("pause") chiede all’interprete dei comandi di eseguire il comando pause. Dipende da una console Windows e da una shell esterna, quindi non è adatto come pausa portabile in Python e potrebbe non comportarsi come previsto quando non è collegata alcuna console. Per mostrare un prompt in console, preferisci input(); per coordinare il lavoro, usa una primitiva di sincronizzazione di threading. Questa chiamata specifica della piattaforma è mostrata nel testo perché non può essere eseguita in tutti gli ambienti.

Scegliere il modo giusto per mettere in pausa

  • Usa time.sleep(seconds) quando il programma deve attendere per una durata nota.
  • Usa input() quando una persona deve decidere quando far riprendere un programma da console.
  • Usa la sincronizzazione di threading quando un thread deve attendere un altro thread o un segnale.
  • Riserva os.system("pause") agli script per console Windows che richiedono specificamente quel comando della shell.

Questi approcci mettono in pausa elementi diversi: un ritardo a tempo sospende il thread chiamante, l’input da console attende una riga inserita da una persona e la sincronizzazione attende un’altra parte di un programma concorrente. Scegli in base a ciò che deve riprendere l’esecuzione e alla necessità che il programma funzioni su più piattaforme.