【发布时间】:2014-04-13 16:53:15
【问题描述】:
我能想到的退出 Python 环境的明显方法是 sys.exit() 或 os._exit()。然而,sys.exit() 不能在主线程之外工作,并且os._exit() 不能运行关闭处理程序(例如,那些通过atexit.register 注册的处理程序)。此外,当有非守护线程运行时,仅退出主线程(例如,可能通过thread.interrupt_main 影响)也不会关闭环境的其余部分。
有没有办法让 Python 从另一个线程而不是运行关闭处理程序的主线程退出?
【问题讨论】:
-
请注意,如果有人向您的程序发送 SIGKILL 或出现电源故障,则 atexit 将永远不会运行。你永远不应该依赖 atexit 运行任何重要的东西(例如那些修改持久数据的东西)。鉴于 atexit 是不可靠的,那么很明显,任何关键的清理/恢复都应该在程序下次再次启动时运行。换句话说,永远不要依赖有序的退出。
-
@LieRyan:当然,我知道这一点,但在某些情况下,如果可能的话,在程序之后进行清理只是很好,即使它不是关键。
标签: python multithreading exit