2010-10-23 18 views
5

Quando uso il vecchio Python thread API tutto funziona bene:Tradurre `thread.start_new_thread (...)` per la nuova filettatura API

thread.start_new_thread(main_func, args, kwargs) 

Ma se provo ad utilizzare la nuova API threading il processo , che gestisce il filo si blocca quando si deve uscire con sys.exit(3):

threading.Thread(target=main_func, args=args, kwargs=kwargs).start() 

Come posso tradurre il codice per la nuova API filettatura?

Si può vedere questo esempio in context.

risposta

7

Questo comportamento è dovuto al fatto che thread.start_new_thread crea thread nella modalità daemon mentre threading.Thread crea thread nella modalità non-daemon.
Per avviare threading.Thread in modalità demone, è necessario utilizzare il metodo .setDaemon:

my_thread = threading.Thread(target=main_func, args=args, kwargs=kwargs) 
my_thread.setDaemon(True) 
my_thread.start() 
2

Il programma terminerà quando tutti i thread non demone siano uscite. È possibile creare il demone secondario Thread impostando la proprietà daemon su True.

In alternativa è possibile sostituire la chiamata a sys.exit con os._exit.