Ell*_*iot 8 python exit-code python-3.x
如果需要,如何正确和干净地终止python程序?sys.exit()不能可靠地执行这个功能,因为它只是终止它被调用的线程,exit()并且quit()不应该被使用,除了终端窗口,raise SystemExit有相同的问题sys.exit()和不好的做法,并os._exit()立即杀死一切,不清理,会导致残差问题.
有没有一种方法可以一直杀死程序和所有线程,无论它在哪里被调用,同时还在清理?
当您的应用程序运行时,可能会发生不好的事情,我们希望从中恢复。电源故障就是一个例子。
没有计算技术可以安排指令在断电的设备上执行。因此,我们可能需要在重新启动时重置某些状态。您的应用程序已经有此要求;我只是把它说得很明确。
正如您在仔细考虑几种标准技术时发现的那样,在可能发生的各种坏事之后很难可靠地获得控制。您没有具体说明您设想的需要清理的项目类型,但我们可以考虑以下情况:
不要直接调用您的应用程序,而是安排它由保姆进程运行,该进程将应用程序作为子进程进行分叉。在某个时刻,应用程序将退出,Nanny 将重新获得对操作系统已整理的所有临时项目的控制权,然后 Nanny 可以在应用程序重新启动之前对永久项目进行任何必要的清理。这与 Nanny 在初始启动时需要执行的清理相同,例如在电源故障事件之后。在父进程下运行应用程序的优点是,父进程可以在简单的应用程序故障(例如 SEGV)后立即执行清理。
清理永久项目可能涉及带时间戳的资源超时。如果您的系统能够在短暂断电后 2 秒内重新启动,您可能会发现有必要在宣布转换之前故意保持 Down(睡眠)状态足够长的时间,以确保远程主机可靠地检测到您转换为 Down至上。Virtual Synchrony 和 Paxos 等技术可以帮助您实现快速融合。
有时,应用程序会在运行清理代码之前意外终止。采取腰带式方法:将必要的清理代码放入(更简单、更可靠)父进程中。
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |