psycopg2でのクエリの実行をキャンセル
-
19-09-2019 - |
質問
どのように1はpyscopg2(のpython Postgresのドライバ)を使用して、クエリステートメントの実行をキャンセルするに行くか?
例として、私は次のコードを持っているとしましょう。
import psycopg2
cnx_string = "something_appropriate"
conn = psycopg2.connect(cnx_string)
cur = conn.cursor()
cur.execute("long_running_query")
それから私は別のスレッドからの長時間実行クエリの実行キャンセルしたい - ?私はこれを行うには、接続/カーソルオブジェクトで呼び出す必要がありますどのような方法を
解決
あなたは<のhref = "http://www.postgresql.org/docs/8.3/static/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE" のrel = "noreferrerを呼び出すことによって、クエリをキャンセルすることができます別の接続で「> pg_cancel_backend(pid)
のPostgreSQLの機能
あなたは connection.get_backend_pid()
(バージョン2.0.8から入手可能)psycopg2の方法。
他のヒント
psycopg2の非同期実行のサポートは に削除されました。
あなたはPY-PostgreSQLとその取引(それのpy3k)、内部実装は非同期であり、中断されているサポートします。
接続オブジェクトがキャンセル部材を有します。これを使用すると、あなたが使用できるスレッド
sqltimeout = threading.Timer(sql_timeout_seconds, conn.cancel)
sqltimeout.start()
タイマーが満了すると、キャンセルは、接続に送信され、例外は、サーバーによって発生します。 クエリが正常に終了したときにタイマーを解除することを忘れないでください....
sqltimeout.cancel()
所属していません StackOverflow