我刚刚创建了一个带有长时间查询的脚本,我添加了一个处理信号,当我按 CTRL + C 时,它会启动一个{ {1}}。
但是当我运行py脚本并按 CTRL + C 时,它只是等待执行结束以处理信号。
我有什么方法可以在跑步时取消它吗?
connection.close()
def signal_term_handler(signal, frame):
connection.cancel()
sys.exit('Excution stopped manually.')
ip = IP
port = PORT
SID = SID
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
connection = cx_Oracle.connect(USER, PASS, dsn_tns)
cursor = connection.cursor()
signal.signal(signal.SIGTERM, signal_term_handler)
signal.signal(signal.SIGINT, signal_term_handler)
cursor.execute(QUERY)
是一个包含多个选择的查询,持续时间约为4分钟。
答案 0 :(得分:0)
cursor = connection.cursor()
try:
cursor.execute(QUERY)
except KeyboardInterrupt:
sys.exit('Excution stopped manually.')
这应该接近您想要的。 看起来cx_Oracle重新引发了KeyBoardInterrupt,因此要完全捕获,您需要将处理程序嵌套在额外的外部尝试中:键盘中断除外: