用于终止python程序的正确方法,无论呼叫位置如何,都要进行清理

Ell*_*iot 8 python exit-code python-3.x

如果需要,如何正确和干净地终止python程序?sys.exit()不能可靠地执行这个功能,因为它只是终止它被调用的线程,exit()并且quit()不应该被使用,除了终端窗口,raise SystemExit有相同的问题sys.exit()和不好的做法,并os._exit()立即杀死一切,不清理,会导致残差问题.

有没有一种方法可以一直杀死程序和所有线程,无论它在哪里被调用,同时还在清理?

J_H*_*J_H 0

当您的应用程序运行时,可能会发生不好的事情,我们希望从中恢复。电源故障就是一个例子。

没有计算技术可以安排指令在断电的设备上执行。因此,我们可能需要在重新启动时重置某些状态。您的应用程序已经有此要求;我只是把它说得很明确。

正如您在仔细考虑几种标准技术时发现的那样,在可能发生的各种坏事之后很难可靠地获得控制。您没有具体说明您设想的需要清理的项目类型,但我们可以考虑以下情况:

  1. 瞬态 - TCP 连接、flock 等。
  2. 永久 - 磁盘文件,对远程主机的副作用

不要直接调用您的应用程序,而是安排它由保姆进程运行,该进程将应用程序作为子进程进行分叉。在某个时刻,应用程序将退出,Nanny 将重新获得对操作系统已整理的所有临时项目的控制权,然后 Nanny 可以在应用程序重新启动之前对永久项目进行任何必要的清理。这与 Nanny 在初始启动时需要执行的清理相同,例如在电源故障事件之后。在父进程下运行应用程序的优点是,父进程可以在简单的应用程序故障(例如 SEGV)后立即执行清理。

清理永久项目可能涉及带时间戳的资源超时。如果您的系统能够在短暂断电后 2 秒内重新启动,您可能会发现有必要在宣布转换之前故意保持 Down(睡眠)状态足够长的时间,以确保远程主机可靠地检测到您转换为 Down至上。Virtual Synchrony 和 Paxos 等技术可以帮助您实现快速融合。

概括

有时,应用程序会在运行清理代码之前意外终止。采取腰带式方法:将必要的清理代码放入(更简单、更可靠)父进程中。


归档时间:

查看次数:

422 次

最近记录:

7 年,11 月 前