 |
 |
 |
La libreria di riferimento di Python |
 |
 |
 |
Questo modulo fornisce meccanismi atti ad usare gestori di segnali in
Python. Alcune regole generali per lavorare con i segnali e i loro
gestori:
- Un gestore per un segnale particolare, una volta impostato, rimane
installato fino a che non venga esplicitamente resettato (Python emula
lo stile delle interfacce BSD indipendentemente dall'implementazione
sottostante), con l'eccezione per il gestore di SIGCHLD,
che segue l'implementazione sottostante.
- Non c'� modo per ``bloccare'' segnali temporaneamente da sezioni
critiche (visto che non � supportato da tutti gli Unix).
- Bench� i gestori dei segnali di Python vengano chiamati in modo
asincrono finch� l'utente ne � interessato, essi possono trovarsi solo
fra istruzioni ``atomiche'' dell'interprete Python. Ci� significa che
i segnali arrivando durante lunghi calcoli implementati puramente in C
(come corrispondenze di espressioni regolari su grandi parti di testo)
possono essere ritardati per un lasso di tempo arbitrario.
- Quando un segnale arriva durante un'operazione di I/O, � possibile che
l'operazione di I/O sollevi un'eccezione dopo il ritorno del gestore
del segnale. Questo dipende dalla semantica dell'implementazione del
sistema Unix sottostante in riferimento alle chiamate di sistema
interrotte.
- Visto che i gestori di segnali C ritornano sempre, ha poco senso
catturare errori sincroni come SIGFPE o
SIGSEGV.
- Python installa un piccolo numero di gestori di segnali di
norma: SIGPIPE � ignorato (perci� errori di
scrittura su pipe e socket possono essere riportati come normali
eccezioni Python) mentre SIGINT viene tradotto in
un'eccezione KeyboardInterrupt. Tutte quante possono
essere sovrascritte.
- Alcune attenzioni devono essere prese se sia segnali che thread
vengono utilizzati dallo stesso programma. La cosa fondamentale da
ricordare nell'usare segnali e thread simultaneamente �: effettuare
sempre operazioni di signal() nel thread principale di
esecuzione. Qualunque thread pu� eseguire un alarm(),
getsignal(), o pause(); solo il thread principale
pu� impostare nuovi gestori di segnale, e il thread principale sar�
l'unico a ricevere segnali (questo viene forzato dal modulo Python
signal, anche se l'implementazione dei thread sottostante
supporta l'invio di segnali ai singoli thread). Ci� significa che i
segnali non possono essere usati come un mezzo di comunicazione
inter-thread. Usare al contrario i lock.
Le variabili definite nel modulo signal sono:
- SIG_DFL
-
Questa � una delle due opzioni standard di gestione dei segnali;
effettuer� semplicemente la funzione predefinita per il segnale. Per
esempio, su molti sistemi l'azione predefinita per
SIGQUIT � fare un core dump ed uscire, mentre l'azione
predefinita per SIGCLD � semplicemente ignorarlo.
- SIG_IGN
-
Questo � un altro gestore di segnale standard, che semplicemente
ignorer� il segnale dato.
- SIG*
-
Tutti i numeri di segnale sono definiti simbolicamente. Per esempio,
il segnale di hangup � definito come signal.SIGHUP; i
nomi di variabile sono identici ai nomi usati nei programmi C, come
li si trova in
<signal.h>. La pagina del manuale Unix per
`signal()' elenca i segnali esistenti (su alcuni sistemi
si trova in signal(2), su altri l'elenco si trova in
signal(7)). Attenzione al fatto che non tutti i sistemi
definiscono lo stesso insieme di nomi di segnali; solo questi nomi
definiti dal sistema sono definiti in questo modulo.
- NSIG
-
Uno in pi� del pi� alto numero di segnale.
Il modulo signal definisce le seguenti funzioni:
-
Se time � diverso da zero, questa funzione richiede che un
segnale SIGALRM sia trasmesso al processo in time
secondi. Ogni precedente allarme schedulato viene cancellato (solo
un'allarme pu� essere schedulato in ogni momento). Il valore
restituito � il numero di secondi rimanenti prima di ogni precedente
allarme impostato che deve essere trasmesso. Se time � zero,
nessun allarme � attualmente schedulato ed ogni allarme schedulato �
cancellato. Il valore restituito � il numero di secondi rimanente
prima di un precedente allarme schedulato. (Leggere la pagina di
manuale Unix alarm(2).)
Disponibilit�: Unix.
-
Restituisce il gestore di segnale corrente per il segnale
signalnum. Il valore restituito pu� essere un oggetto Python
chiamabile, o uno dei valori speciali signal.SIG_IGN,
signal.SIG_DFL o None. Qui,
signal.SIG_IGN significa che il signale � stato in
precedenza ignorato, signal.SIG_DFL significa che era in
uso la maniera predefinita per gestire il segnale, e
None
significa che il gestore di segnale precedente non � stato
installato da Python.
-
Impone al processo di dormire fino a che un segnale venga ricevuto;
il gestore appropriato verr� quindi chiamato. Non ritorna nulla. Non
disponibile su Windows. (leggere la pagina di manuale Unix
signal(2).)
| signal( |
signalnum, handler) |
-
Imposta la gestione per il segnale signalnum alla funzione
handler. handler pu� essere un oggetto Python chiamabile
che prende due argomenti (vedere sotto), o uno dei valori speciali
signal.SIG_IGN o signal.SIG_DFL. Sar�
restituito il precedente gestore di segnale. (leggere sopra la
descrizione getsignal()). (Leggere la pagina di manuale
Unix signal(2).)
Quando i thread sono abilitati, questa funzione pu� essere chiamata
unicamente dal thread principale; chiamandola da altri thread verr�
sollevata un'eccezione ValueError.
L'handler viene chiamato con due argomenti: il numero di
segnale e lo stack frame corrente (None od un oggetto frame;
leggere il manuale di riferimento per una descrizione degli oggetti
frame).
 |
 |
 |
La libreria di riferimento di Python |
 |
 |
 |
Release 2.3.4, documentation updated on 21. maggio 2005.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.