atexit對處理程序我有一塊如下Python代碼:信號處理程序的調用和在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
真正的代碼比這個片段複雜得多,但結構是相同的:即主函數保持無限循環。
我需要一個信號回調來釋放佔用的資源,比如DB句柄。 然後我添加一個SIGTERM
處理程序,以防止服務器被終止,它只是簡單地調用釋放函數然後退出進程。 atexit
其中一個旨在成功處理過程完成。
現在我遇到了一個問題,我只希望release
只能在進程死亡時調用一次。我的代碼有什麼改進?
我想問一下,如果真的有必要退出這種方式沒有正常關閉'main'循環? – user3159253
一個廣泛使用的習慣用法是檢查我們是否應該打破循環,然後明確釋放資源。 – user3159253
@ user3159253嗨,謝謝你的快速回復。我想是的,主循環實際上是一個http服務器模塊,我無法自行中斷環路。只有Ctrl-C可以停止它。是的,它的名字是瓶子T_T。 –