2010-10-23 10 views
5

Wenn ich die alte Python thread API alles verwenden funktioniert:Übersetzen `thread.start_new_thread (...)` auf die neue Threading API

thread.start_new_thread(main_func, args, kwargs) 

Aber wenn ich versuche, den Prozess der neuen threading API zu verwenden , das läuft der Faden hängt, wenn es sich mit sys.exit(3) verlassen sollte:

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

Wie kann ich den Code in das neue Threading-API übersetzen?

Sie können dieses Beispiel in context sehen.

Antwort

7

Dieses Verhalten ist aufgrund der Tatsache, dass thread.start_new_thread erstellt Thread in daemon Modus während threading.Thread erstellt Thread in non-daemon Modus.
Um threading.Thread im Daemon-Modus zu starten, müssen Sie .setDaemon Methode verwenden:

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

Das Programm wird beendet, wenn alle Nicht-Daemon-Threads beendet wurden. Sie können Ihre sekundäre Thread dämonisch machen, indem Sie ihre daemon Eigenschaft auf True setzen.

Alternativ können Sie Ihren Anruf zu sys.exit mit os._exit ersetzen.