将`thread.start_new_thread(...)`转换为新的线程API

时间:2010-10-23 11:40:20

标签: python multithreading

当我使用旧的Python thread API时,一切正常:

thread.start_new_thread(main_func, args, kwargs)

但是如果我尝试使用新的threading API,那么当它应该以{{1​​}}退出时,运行该线程的进程会挂起:

sys.exit(3)

如何将代码转换为新的线程API?

您可以在context中看到此示例。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

当所有非守护程序线程都退出时,程序将退出。您可以通过将Thread属性设置为daemon来制作辅助True守护进程。

或者,您可以将sys.exit的来电替换为os._exit