代码之家  ›  专栏  ›  技术社区  ›  jwoolard

取消Pyscopg2中的查询执行

  •  4
  • jwoolard  · 技术社区  · 15 年前

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

    例如,假设我有以下代码:

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

    然后我想取消从另一个线程执行这个长时间运行的查询——我必须调用连接/光标对象的什么方法来执行这个操作?

    3 回复  |  直到 6 年前
        1
  •  5
  •   piro    15 年前

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

    您可以从中了解要取消的后端的PID connection.get_backend_pid() psycopg2方法(可从版本2.0.8获得)。

        2
  •  0
  •   Tobu    15 年前

    psycopg2的异步执行支持 removed .

    如果可以使用py postgresql及其 transactions (PY3K),内部实现异步,支持中断。

        3
  •  0
  •   ik_zelf    6 年前

    连接对象有一个取消成员。使用这个和线程

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

    当计时器过期时,将向连接发送取消,服务器将引发异常。 当查询正常完成时,不要忘记取消计时器…

    sqltimeout.cancel()
    
    推荐文章