如果运行时间过长,我想停止执行 SQL 语句。
为了实现这一点,我破解了django.core.db.backends.oracle.base
. 在FormatStylePlaceholderCursor.execute
而 executemany
不是:
return self.cursor.execute(TIMEOUT, query, self._param_generator(params))
我愿意:
return timelimited(TIMEOUT, self.cursor.execute, query, self._param_generator(params))
并且timelimited
是这个配方中的一个功能:http: //code.activestate.com/recipes/576780-timeout-for-nearly-any-callable/。cursor.execute
它在单独的线程中包装一个函数(即)并等待TIMEOUT
。如果函数没有返回,则线程停止。
通过此修改,我正在运行的应用程序在一段时间后抛出 ora-01000 最大游标超出。我在徘徊为什么包装cursor.execute
会导致这个问题,如何解决它以及这个问题的其他可用解决方案。