7.5.6 Oggetti thread

Questa classe rappresenta un attività che funziona in un thread di controllo separato. Esistono due modi per specificare l'attività: passando un oggetto chiamabile al costruttore o sovrascrivendo il metodo run() in una sottoclasse. Nessun altro metodo (eccetto per il costruttore) dovrebbe essere sovrascritto in una sottoclasse. In altre parole, sovrascrivere solo i metodi __init__() e run() di questa classe.

Una volta che l'oggetto thread è stato creato, la sua attività deve essere iniziata chiamando il metodo start() del thread. Questi invoca il metodo run() in un thread di controllo separato.

Una volta che l'attività del thread è iniziata, il thread è considerato 'vivo' e 'attivo' (questi concetti sono quasi, ma non proprio, gli stessi; la loro definizione è intenzionalmente qualcosa di vago). Smette di essere vivo e attivo quando il suo metodo run() termina - o normalmente, o sollevando un'eccezione non gestita. Il metodo isAlive() controlla se il thread è vivo.

Altri thread possono chiamare il metodo join() di un altro thread. Questo blocca il thread chiamante fino a che termini il thread il cui metodo join() è stato chiamato.

Un thread ha un nome. Il nome può essere passato al costruttore, impostato con il metodo setName() e ottenuto con il metodo getName().

Un thread può essere etichettato come un ``thread demone''. Il significato di questa etichetta è che l'intero programma Python termina quando sono rimasti solo thread demoni. Il valore iniziale viene ereditato dal thread creatore. L'etichetta può essere impostata con il metodo setDaemon() ed ottenuta con il metodo isDaemon().

Esiste un oggetto ``thread principale''; questo corrisponde al thread iniziale di controllo nel programma Python. Non è un thread demone.

Esiste la possibilità che vengano creati ``oggetti thread dummy''. Essi sono oggetti thread corrispondenti a ``thread alieni''. Questi ultimi sono thread di controllo nati all'esterno del modulo threading, come quelli generati direttamente dal codice C. Gli oggetti thread dummy hanno funzionalità limitate; sono sempre considerati vivi, attivi e demonici, e su di essi non si può fare il join(). Essi non vengono mai cancellati, visto che è impossibile identificare la terminazione dei thread alieni.

class Thread( group=None, target=None, name=None, args=(), kwargs={})
Questo costruttore dovrebbe essere chiamato sempre con argomenti a parole chiave. Gli argomenti sono:

group dovrebbe essere None; È riservato per estensioni future quando una classe ThreadGroup sarà implementata.

target è l'oggetto chiamabile che sarà invocato dal metodo run(). Predefinito è None, che significa che nulla viene chiamato.

name è il nome del thread. Automaticamente, viene costruito un nome univoco nella forma ``Thread-N'' dove N è un piccolo numero decimale.

args è la tupla di argomenti per invocare target. Il valore predefinito è ().

kwargs è un dizionario di argomenti a parola chiave per l'invocazione target. Il valore predefinito è {}.

Se la sottoclasse sovrascrive il costruttore, deve essere sicura di invocare il costruttore della classe base (Thread.__init__()) prima di fare qualsiasi altre cosa al thread.

start( )
Inizia l'attività del thread.

Deve essere chiamato almeno una volta per oggetto thread. Si occupa di far invocare il metodo run() dell'oggetto in un thread di controllo separato.

run( )
Metodo che rappresenta l'attività del thread.

Si può sovrascrivere questo metodo in una sottoclasse. Il metodo standard run() invoca l'oggetto chiamabile passato al costruttore dell'oggetto come argomento target, se è stato passato, con argomenti sequenziali ed a parola chiave presi rispettivamente dagli argomenti args e kwargs.

join( [timeout])
Attende fino al termine del thread. Questo blocca il thread chiamante fino a che termini il thread il cui metodo join() è stato chiamato - normalmente, o attraverso un'eccezione non gestita - o fino a che sopravvenga il timeout facoltativo.

Quando l'argomento timeout è presente e diverso da None, dovrebbe essere un numero in virgola mobile che specifica un timeout per l'operazione in secondi (o una frazione di questi).

Su un thread può essere chiamata join() più volte.

Un thread non può effettuare join() su se stesso perché questo causerebbe un deadlock.

Tentare di fare la join() su un thread prima che sia stato lanciato rappresenta un errore.

getName( )
Restituisce il nome del thread.

setName( name)
Imposta il nome del thread.

Il nome è una stringa usata per soli scopi identificativi. Non ha semantica. Thread multipli possono avere lo stesso nome. Il nome iniziale è impostato dal costruttore.

isAlive( )
Restituisce vero se il thread è vivo.

Detto brutalmente, un thread è vivo dal momento in cui il metodo start() ritorna fino a che termina il suo metodo run().

isDaemon( )
Restituisce l'opzione del thread demone.

setDaemon( daemonic)
Imposta l'opzione del thread demone al valore booleano daemonic. Questo metodo deve essere chiamato prima che sia chiamato il metodo start().

Il valore iniziale è ereditato dal thread creatore.

L'intero programma Python esce quando non è rimasto alcun thread non-demonico.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.