当我使用旧的Python thread
API时,一切正常:
thread.start_new_thread(main_func, args, kwargs)
但是如果我尝试使用新的threading API,那么当它应该以{{1}}退出时,运行该线程的进程会挂起:
sys.exit(3)
如何将代码转换为新的线程API?
您可以在context中看到此示例。
答案 0 :(得分:7)
此行为是由于thread.start_new_thread
在daemon
模式下创建线程而threading.Thread
在non-daemon
模式下创建线程的事实。
要在守护程序模式下启动threading.Thread
,您需要使用.setDaemon
方法:
my_thread = threading.Thread(target=main_func, args=args, kwargs=kwargs)
my_thread.setDaemon(True)
my_thread.start()
答案 1 :(得分:2)
当所有非守护程序线程都退出时,程序将退出。您可以通过将Thread
属性设置为daemon
来制作辅助True
守护进程。
或者,您可以将sys.exit
的来电替换为os._exit
。