首页 > 解决方案 > 有没有办法实现程序终止协议?

问题描述

就我而言,我在程序的整个运行时都在处理数据库,因此我需要为整个程序保持打开“光标”。无论如何我可以实现一个终止协议,以便当我终止它的执行或出现错误时,我能够运行这个简单地关闭光标的快速代码(我正在使用python套接字顺便说一句)。

我怀疑我可以做这样的事情:

if __name__ == "__main__":
    Menu()
    cursor.close()

但是,在我的情况下这不起作用的唯一原因是 Menu 只是启动线程,因此它继续执行,在我的程序继续运行时将我返回到 cursor.close() 。

我不确定是否有办法解决这个问题。

标签: pythonpython-3.xmultithreadingsocketstermination

解决方案


是的,您可以使用 python 中的信号库来实现其中的一些功能,特别是捕获程序终止以及对程序的中断,例如ctrl + c. 例子:

# a function to register the signal handlers
# once the program terminates or is halted by an interrupt like ctrl + c it executes the quit_gracefully function
def register_signal_handler():
    signal.signal(signal.SIGINT, quit_gracefully)
    signal.signal(signal.SIGTERM, quit_gracefully)
    return

def quit_gracefully():
   # close connections etc.

如果出现不同的错误,您可以使用 try-except 块来处理错误并在异常中运行 quit_gracefully 函数。

try:
  # some code
except:
  quit_gracefully()

编辑:

这是一个关于信号的好帖子。如何在 Python 中捕获 SIGINT?


推荐阅读