有序地关闭Python环境

时间:2014-04-13 16:53:15

标签: python multithreading exit

我可以想到让Python环境退出的明显方法是sys.exit()os._exit()。但是,sys.exit()在主线程外部不起作用,os._exit()不运行关闭处理程序(例如通过atexit.register注册的那些)。此外,当有非守护程序线程运行时,只是退出主线程(例如,可能通过thread.interrupt_main实现)也不会使环境的其余部分关闭。

有没有办法让Python从另一个线程退出而不是运行关闭处理程序的主线程?

1 个答案:

答案 0 :(得分:2)

这取决于“有序”的意思。

即使您没有任何非守护程序线程,如果从主线程调用sys.exit(),其他线程也不会以“有序”方式完成。我们无法保证他们会自行清理。

唯一真正干净的方法是让主线程发信号通知他们应该完成的其他线程并中止(例如通过设置一个标志或他们定期检查的Event),等待它们完成(通过join),然后从main函数返回。