1
Amy 原创整理|资料核验:2026-10-31
Python 官方文档说明,atexit 可以登记解释器正常结束时执行的函数,例如主程序执行完毕或调用 sys.exit() 时。执行顺序与登记顺序相反:先登记A、再登记B,退出时先运行B再运行A。
它也有明确边界:遇到Python未处理的终止信号、致命内部错误,或调用 os._exit() 时,登记的退出处理函数不会被调用。
教学示例:把“保存所有工作结果”只写在atexit回调里,看似省事,但无法保证强制终止时仍完成保存。Amy建议把关键结果的持久化放在正常工作流程中,在明确的完成节点保存;atexit只承担适合退出时执行的补充收尾任务。
还要注意,Python 3.12起,在退出处理函数中启动新线程或调用 os.fork() 会引发RuntimeError。不要把程序退出阶段当成启动另一批后台任务的时机;依赖清理顺序时,也应把反向执行这一规则写进设计说明。