2010-10-23 109 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