Innanzitutto, quando si impostano i gestori di segnale utilizzando il modulo signal
, è necessario crearli nella thread principale. Riceverai un'eccezione se proverai a crearli in un thread separato.
movimentatori segnale memorizzato tramite la funzione signal.signal()
sarà sempre chiamata nel thread principale. Sulle architetture che supportano l'invio di segnali ai thread, a livello C credo che il runtime Python ignori tutti i segnali sui thread e abbia un gestore di segnale sul thread principale, che utilizza per inviare al gestore di segnale del codice Python.
La documentazione per il modulo thread
afferma che l'eccezione KeyboardInterrupt
(che viene normalmente attivato da SIGINT
) può essere delivered to an arbitrary thread se non si ha il modulo signal
a vostra disposizione, che tutti i sistemi Unix dovrebbero avere. In tal caso, viene consegnato al thread principale. Se ci si trova su un sistema senza signal
, sarà necessario catturare KeyboardInterrupt
nella discussione e chiamare thread.interrupt_main()
per sollevarlo nuovamente nella discussione principale.
Ulteriori informazioni sono disponibili nei documenti Python per i moduli thread
e signal
.
fonte
2009-07-27 16:21:02
Interessante, ho pensato che solo il thread principale avrebbe ricevuto 'KeyboardInterrupt's. –
Sì! Chissà perché non lo è. –
Nella mia esperienza, e leggendo la documentazione, quando il modulo 'signal' è disponibile,' KeyboardInterrupt' viene consegnato solo al thread principale. – Miles