有没有办法实现程序终止协议?

Is there a way to implement a program termination protocol?

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

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

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

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

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

是的,您可以使用 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 块来处理错误并在 except 中运行 quit_gracefully 函数。

try:
  # some code
except:
  quit_gracefully()

编辑:

这是一个很好的 post 信号。 How do I capture SIGINT in Python?

您还可以使用 atexit 模块:https://docs.python.org/3/library/atexit.html.

像这样:

import atexit

@atexit.register
def close_cursor():
    print("Closing cursor before exiting.")
    cursor.close()