2010-10-23 107 views
5

當我使用舊的Python API thread一切工作正常:翻譯`thread.start_new_thread(...)`新線程API

thread.start_new_thread(main_func, args, kwargs) 

但是,如果我嘗試使用新的API threading過程,它運行的線程掛起時,它應該退出sys.exit(3)本身:

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

我怎樣才能將代碼轉換到新的線程API?

你可以在context看到這個例子。

回答

7

此行爲是由於thread.start_new_threaddaemon模式創建線程而threading.Threadnon-daemon模式創建線程的事實。
以守護進程方式啓動threading.Thread,則需要使用.setDaemon方法:

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

當所有非守護程序線程退出時,程序將退出。您可以通過將其屬性設置爲True來使您的輔助Thread守護神。

或者,您可以用os._exit替換您的電話sys.exit