0
当python进程的主线程关闭时(通常还是未捕获的异常),有没有办法执行一个函数?如何最终确定主线程?
我希望atexit.register
将提供该功能,但显然它当主线程终止不会被调用 - 只有当已经终止所有线程。因此,作为打算在代码不起作用:
import atexit
import threading
done = False
def stop_child_thread():
global done
done = True
def child_thread():
while not done:
pass
atexit.register(stop_child_thread)
t = threading.Thread(target=child_thread)
t.start()
我不想启动子线程的守护线程,因为我希望它有机会后自己清理终止前。
我现在唯一能想到的解决方案是定期检查(从子线程或专用线程)主线程是否仍然存在,如果没有,请运行我需要的功能。
THX,这个似乎简单的设置,我在我的问题表现出的工作 - 这是比轮询更好我打算使用。不幸的是,在实际的代码中,它导致了一个小小的错误:尽管所有线程都成功完成,python解释器似乎仍然活着;它很容易被CTRL-C停止。我不确定发生了什么事,我不能用一个小例子来重复它;也许python解释器退出机制变得困惑。 – max