python - 有没有办法实现程序终止协议?
问题描述
就我而言,我在程序的整个运行时都在处理数据库,因此我需要为整个程序保持打开“光标”。无论如何我可以实现一个终止协议,以便当我终止它的执行或出现错误时,我能够运行这个简单地关闭光标的快速代码(我正在使用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 块来处理错误并在异常中运行 quit_gracefully 函数。
try:
# some code
except:
quit_gracefully()
编辑:
这是一个关于信号的好帖子。如何在 Python 中捕获 SIGINT?
推荐阅读
- javascript - 当我尝试设置私有路由来处理 firebase 身份验证时出现此错误
- python - 是否可以通过将当月的天数减少到 1 来从 SQLAlchemy 中的日期时间中提取一个月,以便在图表中绘制数据?
- java - 我制作了一个简单的 java 程序来创建一组卡片(一副牌),然后在其中搜索一张特定的卡片
- database - 如何通过检查同一表中的其他行来在 Oracle SQL 中插入行
- c# - 在 C# 中访问 Azure 中系统托管标识的应用程序 ID
- python - Python 传输端点已连接
- javascript - 在循环中获取嵌套对象的值
- c# - 尝试使用自定义 URL ASP.NET MVC
- html-table - 区分单击表格行和单击其文本
- html - Firefox和Chrome中rowspan单元格高度差旁边的单元格