如何使用 pyscopg2(Python Postgres 驱动程序)取消查询语句的执行?

举个例子,假设我有以下代码:

import psycopg2
cnx_string = "something_appropriate"

conn = psycopg2.connect(cnx_string)
cur = conn.cursor()
cur.execute("long_running_query")

然后我想从另一个线程取消长时间运行的查询的执行 - 我必须在连接/游标对象上调用什么方法才能执行此操作?

有帮助吗?

解决方案

您可以通过调用取消查询 pg_cancel_backend(pid) PostgreSQL 函数位于单独的连接中。

可以从后台获取取消的PID connection.get_backend_pid() psycopg2 的方法(从版本 2.0.8 开始提供)。

其他提示

psycopg2的异步执行支持一直除去

如果您可以使用PY-PostgreSQL和其交易(它的py3k)的内部实现是异步的并且支持被中断。

在连接对象具有取消构件。使用这个和线程,你可以使用

sqltimeout = threading.Timer(sql_timeout_seconds, conn.cancel)
sqltimeout.start()

当该定时器期满时,取消被发送到连接和一个异常将被服务器提出。 不要忘记取消计时器当查询正常结束....

sqltimeout.cancel()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top