【发布时间】:2014-05-05 08:27:55
【问题描述】:
我有一段 Python 代码如下:
import sys
import signal
import atexit
def release():
print "Release resources..."
def sigHandler(signo, frame):
release()
sys.exit(0)
if __name__ == "__main__":
signal.signal(signal.SIGTERM, sigHandler)
atexit.register(release)
while True:
pass
真正的代码远比这个sn-ps复杂,但结构是一样的:即main函数保持一个无限循环。
我需要一个信号回调来释放占用的资源,比如数据库句柄。
然后我添加一个SIGTERM 处理程序,以防服务器被杀死,它只是调用释放函数然后退出进程。
atexit 旨在成功完成处理过程。
现在我有一个问题,我只想在进程被终止时调用 release 一次。我的代码有什么改进吗?
【问题讨论】:
-
我想问一下是否真的有必要以这种方式退出
main中的循环而优雅地关闭? -
一个广泛使用的习惯用法是检查我们是否应该打破循环然后明确释放资源。
-
@user3159253 您好,感谢您的快速回复。我想是的,主循环实际上是一个http服务器模块,我自己无权中断循环。只有 Ctrl-C 可以阻止它。是的,它的名字是瓶子T_T。