取消/中断cx_oracle上的query.execute()

时间:2018-04-25 10:31:19

标签: python oracle cx-oracle

我刚刚创建了一个带有长时间查询的脚本,我添加了一个处理信号,当我按 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分钟。

1 个答案:

答案 0 :(得分:0)

cursor = connection.cursor()

try:
  cursor.execute(QUERY)
except KeyboardInterrupt:
  sys.exit('Excution stopped manually.')

这应该接近您想要的。 看起来cx_Oracle重新引发了KeyBoardInterrupt,因此要完全捕获,您需要将处理程序嵌套在额外的外部尝试中:键盘中断除外: