有没有办法实现程序终止协议?
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()
就我而言,我在程序的整个 运行 时间内都在处理数据库,因此我需要在整个程序中保持 '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()